lambda 表达式的可变参数模板

2023-11-23

使用 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(使用前将#替换为@)

lambda 表达式的可变参数模板 的相关文章

随机推荐