我要調用的方法(在這個例子中的std ::線程構造函數) 與拉姆達函數,傳遞int值:如何用參數編寫lambda函數? C++
int a=10;
std::thread _testThread = thread([a](int _a){
//do stuff using a or _a ?
});
_testThread.detach();
我不知道如何正確地寫這樣的功能,我得到這個錯誤: C2064:術語不評估爲取值爲0的函數
我要調用的方法(在這個例子中的std ::線程構造函數) 與拉姆達函數,傳遞int值:如何用參數編寫lambda函數? C++
int a=10;
std::thread _testThread = thread([a](int _a){
//do stuff using a or _a ?
});
_testThread.detach();
我不知道如何正確地寫這樣的功能,我得到這個錯誤: C2064:術語不評估爲取值爲0的函數
std::thread
需要可調用對象以及任何傳遞給它的參數。如果您沒有提供參數,std::thread
將嘗試不帶任何參數地調用該對象,從而導致錯誤。
如果你需要一個參數:
std::thread _testThread{[a](int _a) {
std::cout << a << ' ' << _a; //prints main's a, followed by somethingThatWillBe_a
}, somethingThatWillBe_a};
如果你只是想使用main
的a
,它已經拍攝:
std::thread _testThread{[a] {
std::cout << a; //prints main's a
}};
我也建議是,如果你超級小心認爲你需要分離一個線程。如果有任何加入線程的可能性,那就去做吧。
您可以通過以下兩種方式之一訪問int a
。無論是在把它作爲一個參數傳遞給線程的構造函數或捕獲它在lambda的關閉:
int a=10;
// pass in a as a parameter
std::thread _testThread1([](int _a){
//do stuff using a or _a ?
}, a); // pass a to the parameter _a
_testThread1.detach();
// capture a in the closure
std::thread _testThread2([a](){ // capture a
//do stuff using a or _a ?
});
_testThread2.detach();
如果你只是想通過一些價值lambda表達式,看我下面的代碼:
int main()
{
int a = 10;
[](int arg)
{
cout << "arg = " << arg << endl;
}
(a);
return 0;
}
如果你想用lambda函數線程和傳遞給它的一些參數見下代碼示例:
int main()
{
int a = 10;
thread thd([](int arg) { cout << "arg = " << arg << endl; }, a);
thd.join();
return 0;
}
你必須捕捉'_a',爲您捕捉'了'。 – juanchopanza 2014-08-27 21:08:59
好吧,我只需要在該線程中的'a'。 – 2014-08-27 21:10:11
這就是一個lambda函數 – 2014-08-27 21:10:20