|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
||||||
Variadic templates локальные переменные18.11.2015, 18:44. Показов 1546. Ответов 7
Метки нет (Все метки)
Еще один вопрос по Variadic templates.
Решаю следующую задачу: Необходимо сохранить в памяти функцию с набором параметров для последующего использования. Разумеется в виде шаблона, дабы получить решения для любого набора параметров. Благодаря вашей тени первую половину задачи мне удалось решить. Проблема возникла уже при восстановлении набора параметров из памяти. По сути есть вот что:
void* push_pack (Args ... args) - складывает свои аргументы последовательно в память, вовращает указатель на архив.. void get_pack (void* archive, Args& ... args) - достаёт из архива информацию , кладёт её в args . Проблема заключается в том, что что-бы воспользоваться get_pack нужно передать ей args... Но функция void exec() не должна принимать никаких параметров снаружи, а значит args... должны быть как-то созданы внутри самой функции. Вопрос. Как создать локальные переменные по списку типов ArgumentTypes. Ну, или же, как решить эту задачу другим способом...
0
|
||||||
| 18.11.2015, 18:44 | |
|
Ответы с готовыми решениями:
7
Variadic Templates - как обращаться к аргументам variadic-функции?
Variadic templates |
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||||||||||||||||||||||
| 18.11.2015, 21:11 | ||||||||||||||||||||||
Сообщение было отмечено Mirmik как решение
РешениеЛокальные переменные должны быть проинициализированы из хранилища void*? indices trick implementation
Тогда твой код будет примерно таким: Кликните здесь для просмотра всего текста
Можно чуть оптимизировать алгоритмы, но мне лень Для демонстрации сойдет.Добавлено через 16 минут Mirmik, вообще говоря, полезно будет рассмотреть вариант использовать для хранения архива сразу std::tuple. Тогда все сильно упростится. Добавлено через 23 минуты Mirmik, собственно, реализация тривиальная:
3
|
||||||||||||||||||||||
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
||||||
| 18.11.2015, 21:11 [ТС] | ||||||
|
Ох... А можно пару слов о том, как это работает
?... Это какая-то хитрая шаблонная магия...
0
|
||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||||
| 18.11.2015, 21:30 | |||||||
|
Рекурсивно спускаемся, уменьшая счетчик. В конце рекурсии отбрасывается лидирующий ноль (их два, один для оставноки рекурсии - его мы отбрасываем, второй получается после всего прохода, как результат 1(Max) - 1). На выходе получаем тип indices<0, 1, 2, ...., Max - 1>. Добавлено через 2 минуты Mirmik, лучше посмотри обновление предыдущего поста. В С++14 можно еще сократить, если применить std::index_sequence. Добавлено через 2 минуты
Добавлено через 6 минут Mirmik, Ну и это, конечно же, все очень здорово (я не шучу), но здесь уместен вопрос: ты ведь знаешь про существование std::function и std::bind?
0
|
|||||||
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
| 18.11.2015, 21:44 [ТС] | |
|
Клёво.
![]() Пасибо большое . Потребуется, правда, некоторое время, чтобы понять, как этот indicies всё-таки работает , и написать реализацию tuple... У меня тут весьма импровизированная стандартная библиотека.Так что может я еще что-нибудь спрошу... Попозже. Очень, очень неплохо. Добавлено через 2 минуты Про std::function я узнал сегодня утром.... Про std::bind пока еще незнаю. Сейчас изучу.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 18.11.2015, 21:46 | ||
|
Подсказка: см. в сторону "рекурсивного" наследования.
0
|
||
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
| 18.11.2015, 21:50 [ТС] | |
|
Уже написал.
... Я так понимаю, что что-то вроде std::bind практически и было только что написано... Отлично. В таком стиле и будем оформлять. В общем-то я как раз потихоньку собираю стандартную библиотеку для использования на микроконтроллерах. Конечно, есть много готовых реализаций, но такая работа позволяет очень много приобрести в плане понимания. И избавляет от многих излишних деталей... Аллокаторы, например, у меня переделаны.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 18.11.2015, 21:58 | |
|
0
|
|
| 18.11.2015, 21:58 | |
|
Помогаю со студенческими работами здесь
8
Variadic templates Variadic templates
Variadic Templates
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|