我正在学习有关C++的多线程,并试图建立一个线程池,但得到一个编译器错误说“错误:'mapperNodes'未被捕获”和“错误:”命令“未被捕获”。我已经读了一些关于使用“this”来捕获lambda中的变量,但到目前为止没有任何工作。编译器线程池的lambda函数中的“未捕获”的错误变量
如何在下面的代码中使用线程池lambda函数中的命令和mapperNoders变量?
void MapReduceServer::spawnMappers() throw() {
vector<string> mapperNodes(nodes);
random_shuffle(mapperNodes.begin(), mapperNodes.end());
string command = buildCommand(mapperNodes[0], executablePath, mapperExecutable, mapOutputPath);
ThreadPool pool(numMappers);//numMappers = 8
for (size_t id = 0; id < numMappers; id++) {
pool.schedule([id] {
cout << oslock << "Thread (ID: " << id << ") has started." << endl << osunlock;
spawnWorker(mapperNodes[0], command); /*compiler error here*/
cout << oslock << "Thread (ID: " << id << ") has finished." << endl << osunlock;
});
}
@ M.M,我认为你错了。 TC++ PL第4版的§11.4.4。明确表示可以省略空的参数列表。例如,[cppreference.com中的这篇文章](http://en.cppreference.com/w/cpp/language/lambda)也是如此。 – Paulo1205
@ Paulo1205很酷,很高兴知道 –