0
我有點困惑,如果有可能如何使用可變元組作爲函數的參數以及如何初始化它。元組作爲函數參數
template <typename T, Arg ...>
void foo (int a, std::tuple<T, sizeof(Arg)> TupleTest);
...
foo(TupleTest(2, "TEST", 5.5));
這怎麼可以用C++ 0x實現?
我有點困惑,如果有可能如何使用可變元組作爲函數的參數以及如何初始化它。元組作爲函數參數
template <typename T, Arg ...>
void foo (int a, std::tuple<T, sizeof(Arg)> TupleTest);
...
foo(TupleTest(2, "TEST", 5.5));
這怎麼可以用C++ 0x實現?
您不需要獲取模板參數的數量。只要這樣做:
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));
你想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
沒有實際意義(除非您想禁止一個空的模板列表),這樣你可以刪除它沒有損失。
這有點不清楚 - 你想達到什麼目的?你可以說'template void foo(std :: tuple t){/ * ... * /}'。 –
2012-01-05 18:19:02
什麼是TupleTest?它是一種元組嗎?爲什麼'int a'在Tuple之外?把sizeof(Arg)'放在那裏有什麼意義? – kennytm 2012-01-05 18:27:13