元组作为函数参数

时间:2012-01-05 18:03:06

标签: c++ c++11 tuples variadic

如果有可能如何使用可变参数元组作为函数中的参数以及如何初始化它,我有点困惑。

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

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

如何使用c ++ 0x实现?

2 个答案:

答案 0 :(得分:7)

您无需获取模板参数的数量。就这样做:

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));

答案 1 :(得分: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没有任何实际意义(除非您明确要禁止空模板列表),因此您可以直接删除它。