使用 g++ 执行此操作的正确方法是什么:
template < typename F >
void g (F f);
template < typename ... A >
void h (A ... a);
template < typename ... A >
void f (A ... a) {
g ([&a] () { h (a...); }); // g++-4.6: error: parameter packs not expanded with »...«
}
我认为你需要扩展包a
也在捕获列表中,如下所示:
template < typename ... A >
void f (A ... a) {
g ([&, a...] () { h (a...); });
}
以下是 C++0x 最终委员会草案第 5.1.2.23 节的相关文本:
捕获后跟省略号是
包扩展 (14.5.3)。 [ 例子:
template<class... Args> void f(Args... args) {
auto lm = [&, args...] { return g(args...); }; lm();
}
—结束示例]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)