任何人都可以为我确认以下代码(包括函数参数包的嵌套扩展)在 C++11 中是允许的(我当然会感谢对标准的任何引用):
template<class ... VFTs> int variadic_fun(VFTs ... vfts) {
return sizeof ...(vfts);
}
template<int ... Ns> struct IntPack {
template<class ... MemTs> static int variadic_memfun(MemTs ... MemArgs) {
return variadic_fun(([=]() {
cout << "MemArgs = " << MemArgs << "\n";
cout << "Ns = " << Ns;
// Note the nested expansion of MemArgs here:
cout << "variadic_fun(MemArgs...) = " << variadic_fun(MemArgs ...) << "\n";
cout << "MemArgs[Ns] = " << MemArgs[Ns] << "\n";
return 0;
})()...);
}
};
int main() {
IntPack<0, 1, 2>::variadic_memfun("123", "ABC", "XYZ");
}
谢谢!
PS 由于有人在下面问,这段代码适用于我的实现通用 lambda 的 clang 补丁(还不是标准 C++,仍然只是一个建议) - 我没有用任何其他编译器尝试过它 - 并且不确定它是否适用于最新的当前的clang trunk(它可能确实如此) - 我当然欢迎任何关于它是否与任何实现可变参数和lambdas的主流编译器一起编译的信息。