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

时间:2014-10-24 17:21:41

标签: 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...
                        );
}

以下签名会出错:

[&](){ }
[&args](){ }
[&args...](){ }
[&,args...](){ }
[&...args](){ }

2 个答案:

答案 0 :(得分:7)

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

auto lambda = [](auto... args) {...};

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

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

答案 1 :(得分:4)

试试这个:

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

here

被盗
  

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

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