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

Mpa*_*pac 4 c++ lambda templates c++11

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

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

And*_*owl 7

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

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

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

- 结束例子 ]

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

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

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