C ++ 11:“参数包”和“可变参数模板”之间有什么区别?

时间:2016-07-11 05:13:43

标签: templates c++11 parameters pack variadic

从介绍http://en.cppreference.com/w/cpp/language/parameter_pack看,似乎“参数包”的概念与“可变参数模板”相同。那么它们之间的概念差异是什么?

谢谢!

1 个答案:

答案 0 :(得分:5)

从语法上讲,参数包是可变参数模板的一部分。例如,

template<class ... Types> struct Tuple {};

是可变结构模板,Types是其中的参数包。 Tuple本身不是参数包。

您可以将任何类型参数集传递给Tuple,并将它们打包到Types包。例如在代码中

Tuple<int, float, std::string> foo;

我们使用Tupleintfloat类型实例化了string模板,并获得了实际类型Tuple<int, float, std::string>的结构。 Tuple的代码现在可以expand Types打包。