我试图将可变数量的参数传递给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](){ }
答案 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 ]