C 11 lambda函式 – 如何傳遞引數
我使用lambda函式將其傳遞給std :: condition_variable wait()函式,但情況並非如此.我使用的lambda函式沒有收到任何引數,一切都是我絕對明確的.但我完全不明白如何使用具有引數列表的lamdba函式.用引數顯示lambda?如何傳遞引數給他們?
Show lambda with parameters are used? How to pass parameters to them?
它與任何其他型別的可呼叫物件完全一樣:
#include <iostream> int main() { auto l = [] (int i) { std::cout << "The answer is " << i; }; l(42); }
還要注意,您不需要在變數中儲存lambda,以便呼叫它.以下是重寫上述程式的另一種方法:
#include <iostream> int main() { [] (int i) { std::cout << "The answer is " << i; } (42); //^^^^ //Invoked immediately! }
lambda函式的型別(所謂的“lambda閉包”)由編譯器定義,並且是一個具有呼叫運算子的函式,它的簽名是您在定義lambda時指定的一個.因此,您可以像呼叫函式一樣呼叫lambda(即完全像呼叫函式 – 或任何可呼叫物件).
因此,如果要為物件分配一個lambda,最佳做法是讓編譯器通過使用auto來推斷其型別.如果您不想或不能使用自動,那麼您可以:
>使用功能指標,用於非捕獲的lambdas(捕獲lambdas不能轉換為函式指標).在上述情況下,以下也將起作用:
#include <iostream> int main() { void (*f)(int) = [] (int i) { std::cout << "The answer is " << i; }; f(42); }
>使用std :: function(這是永遠可能的,即使lambda正在捕獲):
#include <iostream> #include <functional> int main() { std::function<void(int)> f = [] (int i) { std::cout << "The answer is " << i; }; f(42); }
http://stackoverflow.com/questions/15853665/c11-lambda-function-how-to-pass-parameter