15 / 15 / 3
Регистрация: 04.07.2013
Сообщений: 76
|
|||||||||||
1 | |||||||||||
Инициализация std::tuple переменным числом аргументов29.07.2013, 00:38. Показов 4701. Ответов 18
Метки нет (Все метки)
Добрый вечер.
Мне нужно инициализировать объект std::tuple, который является членом некоторого другого шаблонного класса с переменным числом аргументов. Есть такой код, который, естественно, не компилируется:
У меня есть два вопроса: 1. Собственно, по вышеприведенному коду - как реализовать добавление объектов из списка Args в кортеж? Например:
2. Есть ли какой-нибудь способ "обхода" пакета Arg наподобие массиву (в цикле, например)?
0
|
29.07.2013, 00:38 | |
Ответы с готовыми решениями:
18
Функции с переменным числом аргументов Функции с переменным числом аргументов Шаблоны с переменным числом аргументов Написать функцию с переменным числом аргументов |
Каратель
|
||||||
29.07.2013, 01:41 | 2 | |||||
только для типов с constexpr конструтором
2
|
15 / 15 / 3
Регистрация: 04.07.2013
Сообщений: 76
|
||||||
29.07.2013, 02:18 [ТС] | 3 | |||||
Jupiter, кстати, вот так тоже работает как оказалось:
1
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
||||||
29.07.2013, 02:28 | 4 | |||||
Я, если честно, не понял, если написать
1
|
15 / 15 / 3
Регистрация: 04.07.2013
Сообщений: 76
|
|
29.07.2013, 02:31 [ТС] | 5 |
gray_fox, а они разве добавятся в кортеж? К тому же, структуры A,B и C все-таки не в main будут определяться.
0
|
Jupiter
|
29.07.2013, 02:37
#6
|
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
29.07.2013, 02:40 | 7 |
Gorillych, ну члены mems будут сконструированны (value-initialized вроде), если про это; либо я не понял...
Добавлено через 1 минуту не суть...
0
|
15 / 15 / 3
Регистрация: 04.07.2013
Сообщений: 76
|
||||||
29.07.2013, 19:01 [ТС] | 8 | |||||
Если кому интересно - ниже реализация гетерогенного контейнера, наподобие boost::any. Можно обходить элементы контейнера наподобие массивам, но в компайл-тайме:
1
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|||||||||||
29.07.2013, 19:26 | 9 | ||||||||||
Gorillych, я до сих пор не понял, чем
0
|
Каратель
|
||||||
29.07.2013, 19:32 | 10 | |||||
gray_fox, ничем
Gorillych, если уж делаешь список инициализации то инициализируй поля в том порядке, в котором они объявлены в классе т.е.
1
|
15 / 15 / 3
Регистрация: 04.07.2013
Сообщений: 76
|
||||||
29.07.2013, 19:34 [ТС] | 11 | |||||
gray_fox, ну как же. Я чего хотел добиться: в параметрах шаблона HeterogeneousContainer мы указываем список объектов классов, которые мы бы хотели добавить в контейнер. Далее в списке инициализации мы в кортеж добавляем экземпляры объектов перечисленных классов. Если убрать elements(std::make_tuple(Arg()...)), то кортеж будет пустой. Это получается что-то вроде:
P.S. Попробуйте скомпилировать c elements(std::make_tuple(Arg()...)) и без
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
29.07.2013, 19:39 | 12 | |||||
Gorillych, И? https://ideone.com/3bdwJx
Отличий никаких, просто потому, что в кортеже все аргументы будут созданы, используя дефолтный конструктор, ровно это же делает и ваша конструкция. Это, не то что вы сказали, это
1
|
15 / 15 / 3
Регистрация: 04.07.2013
Сообщений: 76
|
|
29.07.2013, 19:42 [ТС] | 13 |
ForEveR, хм....
У меня не компилится почему-то З.Ы. Все нормально))) Не то делал. Получается, действительно не нужно. Это очень даже хорошо
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
||||||||||||||||
29.07.2013, 19:44 | 14 | |||||||||||||||
Да нет... если надо "пустой", то что-нибудь вроде
1
|
15 / 15 / 3
Регистрация: 04.07.2013
Сообщений: 76
|
|
29.07.2013, 19:48 [ТС] | 15 |
gray_fox, да, понял.
Добавлено через 3 минуты gray_fox, а вот интересно: если у структур A B C будут конструкторы не по умолчанию, с параметрами, как тогда быть?
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
29.07.2013, 19:49 | 16 |
Gorillych, Тогда, так как сделали вы +-.
0
|
15 / 15 / 3
Регистрация: 04.07.2013
Сообщений: 76
|
|
29.07.2013, 19:50 [ТС] | 17 |
ForEveR, т.е. здесь уже явно нужен будет make_tuple, да?
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
||||||
29.07.2013, 19:54 | 18 | |||||
Gorillych, эмм, наверное так
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
29.07.2013, 19:55 | 19 |
Gorillych, Можно и конструктор просто вызвать...
0
|
29.07.2013, 19:55 | |
29.07.2013, 19:55 | |
Помогаю со студенческими работами здесь
19
Шаблонная функция с переменным числом аргументов GCC и функции с переменным числом аргументов Функция с переменным числом аргументов (через шаблоны) Шаблон с переменным числом аргументов, и возвращаемое значение функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |