繁体   English   中英

如何在lambda函数中捕获可变数量的参数

[英]How to capture variable number of arguments in lambda function

我尝试了以下代码但不编译。

template <class T, class... A>
void tpool::enqueue(T&& func, A&&... args) {
    std::function<void()> task([func, args] () {
        //...
    });
}

只需使用省略号即可。 根据C ++ 11标准的5.1.2 / 23段:

捕获后跟省略号是包扩展(14.5.3)。 [ 例如

 template<class... Args> void f(Args... args) { auto lm = [&, args...] { return g(args...); }; lm(); } 

- 结束例子 ]

注意:有趣的是,GCC拒绝编译它(参见实例 ):

template <class T, class... A>
void foo(T&& func, A&&... args) {
    std::function<void()> task([func, args...] () {
        //...
    });
}

但考虑到标准中的上述示例,这绝对是一个编译器问题。

在捕获中使用args时,需要省略号:

template <class T, class... A>
void tpool::enqueue(T&& func, A&&... args) {
    std::function<void()> task([func, args...] () {
        //...
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM