如何将可变数量的参数传递给lambda函数

Pro*_*Cpp 11 c++ lambda

我试图将可变数量的参数传递给lambda函数.在lambda函数中接受可变数量参数的原型是什么?我应该写一个命名函数而不是lambda吗?

std::once_flag flag;

template<typename ...Args>
void gFunc(Args... args)
{
}

template<typename ...Args>
void func(Args... args)
{
    std::call_once(flag,[](/*accept variable number of arguments*/... args)
                        {
                                // more code here
                                gFunc( args...);
                        }, 
                        args...
                        );
}
Run Code Online (Sandbox Code Playgroud)

以下签名给出错误:

[&](){ }
[&args](){ }
[&args...](){ }
[&,args...](){ }
[&...args](){ }
Run Code Online (Sandbox Code Playgroud)

Ant*_*vin 8

在C++ 14中,你可以做到

auto lambda = [](auto... args) {...};
Run Code Online (Sandbox Code Playgroud)

但在你的情况下,我相信简单的捕获就足够了:

std::call_once(flag, [&] {
                         gFunc(args...); // will implicitly capture all args
                     }
               );
Run Code Online (Sandbox Code Playgroud)


P0W*_*P0W 6

尝试这个 :

template<typename ...Args>
void func(Args... args)
{
    std::call_once(flag,[&, args...]( )
                        {   
                         gFunc( args...);
                        }, 
                        args...
                        );
}
Run Code Online (Sandbox Code Playgroud)

这里被盗

§ 5.1.2后跟省略号的捕获是包扩展(14.5.3)。

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