2012-01-05 7 views
0

Я немного смущен, если возможно, как использовать вариационный кортеж в качестве аргумента в функции и как ее инициализировать.tuple как аргумент функции

template <typename T, Arg ...> 
     void foo (int a, std::tuple<T, sizeof(Arg)> TupleTest); 
... 

foo(TupleTest(2, "TEST", 5.5)); 

Как это можно реализовать с помощью C++ 0x?

+1

Это немного неясно - чего вы пытаетесь достичь? Вы можете просто сказать 'template void foo (std :: tuple t) {/ * ... * /}'. –

+0

Что такое TupleTest? Это тип кортежа? Почему 'int'' находится за пределами Tuple? В чем смысл размещения 'sizeof (Arg)' там? – kennytm

ответ

6

Вам не нужно получать количество аргументов шаблона. Просто сделайте это:

template <typename... T> 
void foo(int a, std::tuple<T...> TupleTest); 

// make_tuple so we don't need to enter all the type names 
foo(0, std::make_tuple(2, "TEST", 5.5)); 
0

Для чего вы хотите sizeof? Просто используйте VARIADIC расширение:

template <typename T, typename Arg ...> 
void foo(int a, std::tuple<T, Arg...> TupleTest); 

И здесь, TupleTestявляется имя аргумента, а не имя типа. Поэтому при вызове метода не используйте его.

foo(42, std::tuple<int, char const*, double>(2, "TEST", 5.5)); 

Наконец, тип аргумента T не служит никакой реальной цели (если вы явно не хотите, чтобы запретить пустой список шаблонов), так что вы можете просто удалить его без потерь.

Смежные вопросы