[英]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.