【发布时间】:2012-03-27 21:14:21
【问题描述】:
Andrei Alexandrescu 做了一场精彩的演讲,题为:Variadic Templates are Funadic。
他提出了以下三个不同的扩展:
template <class... Ts> void fun( Ts... vs ) {
gun( A<Ts...>::hun(vs)...);
gun( A<Ts...>::hun(vs...));
gun( A<Ts>::hun(vs)...);
}
他解释说:
呼叫 1:
扩展所有Ts 以实例化class A,
然后拨打hun(vs)
然后在将所有参数传入gun时再次展开所有参数
呼叫 2:
分别展开所有Ts 和所有vs
调用 3:
以锁步扩展,即:
展开 Ts 的参数 1 和 vs 的参数 1
展开 Ts 的参数 2 和 vs 的参数 2
展开Ts的参数n和vs的参数n
关于可变参数模板的其他讨论似乎只涵盖了简单的可变参数类模板和可变参数函数,例如 typesafe printf 等。我不确定这些不同类型的扩展如何影响代码以及每种类型的用处。
有没有人有一些例子来展示每种扩展类型的应用?
【问题讨论】:
-
@KennyTM 不是重复的。这家伙想要每种扩展类型的示例(不一定只有 alexandrescu 展示的那三种,他展示的只是两种类型的扩展(一种进入模板参数列表,另一种进入函数参数列表)。
-
...但是当他接受一个只显示这两种扩展类型的答案时,我猜要么问题不精确,要么我对问题缺乏理解,或者两者兼而有之......
标签: c++ templates c++11 variadic-templates