如何用参数写lambda函数?C++

Dai*_*vys 2 c++ argument-passing inline-functions stdthread

我想用lambda函数调用一个方法(对于这个例子std :: thread构造函数),传递int值:

int a=10;

std::thread _testThread = thread([a](int _a){
  //do stuff using a or _a ?
});
_testThread.detach();
Run Code Online (Sandbox Code Playgroud)

我不知道如何正确编写这样的函数,我得到这个错误:C2064:term不计算为0参数的函数

chr*_*ris 8

std::thread获取可调用对象以及传递给它的任何参数.如果不提供参数,std::thread将尝试在没有参数的情况下调用该对象,因此会出错.

如果您需要参数:

std::thread _testThread{[a](int _a) {
    std::cout << a << ' ' << _a; //prints main's a, followed by somethingThatWillBe_a
}, somethingThatWillBe_a};
Run Code Online (Sandbox Code Playgroud)

如果你只是想用maina,它已经拍摄:

std::thread _testThread{[a] {
    std::cout << a; //prints main's a
}};
Run Code Online (Sandbox Code Playgroud)

如果您认为需要分离线程,我还建议您非常小心.如果有可能加入线程,那就去吧.