6

C++11 引入可变参数模板

template <typename... Args>
void foo(Args... params) {
    cout << sizeof...(Args) << endl;
}

Args和的名称是params什么?我知道其中一个(至少?)被称为可变参数模板包,但它是什么?另一个叫什么?

4

1 回答 1

12

部分引用 FDIS,§14.5.3:

1模板参数包是接受零个或多个模板参数的模板参数。

2函数参数包是接受零个或多个函数参数的函数参数。

3参数包是模板参数包或函数参数包。

4包扩展由一个模式一个省略号组成,其实例化会在列表中产生零个或多个模式的实例化。

所以在你的例子中,

  • typename... Args是一个模板参数包(因此也是一个参数包
  • Args... params是一个函数参数包(因此也是一个参数包
  • sizeof...(Args)是一个包扩展,其中Args模式(在此上下文中的标识符)。
于 2011-11-01T20:24:29.793 回答