簡體   English   中英

如何在lambda函數中捕獲可變數量的參數

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM