我要调用的方法(在这个例子中的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