2012-01-05 66 views
0

我有點困惑,如果有可能如何使用可變元組作爲函數的參數以及如何初始化它。元組作爲函數參數

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){/ * ... * /}'。 – 2012-01-05 18:19:02

+0

什麼是TupleTest?它是一種元組嗎?爲什麼'int a'在Tuple之外?把sizeof(Arg)'放在那裏有什麼意義? – kennytm 2012-01-05 18:27:13

回答

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?只需使用一個可變擴展:

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沒有實際意義(除非您想禁止一個空的模板列表),這樣你可以刪除它沒有損失。