我正在學習有關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很酷,很高興知道 –