2012-06-06 164 views
0

我在使用Boost的線程中使用lambda問題。boost :: lambda with boost :: thread

該代碼應該將函數(字符串)的結果放在向量的指定索引中。

std::vector<string> results(size); 
std::vector<boost::thread> threads; 
for( int i = 0; i < size; i++) { 
    threads.push_back(boost::thread(results.at(i) = getAString(x,y,zed))); 
} 

我該如何去使用Boost :: lambda?

請不要提及使用C++ 11語法。我不得不使用的系統不支持支持C++ 11的編譯器。謝謝!

回答

0

在你的情況,我想知道lambda函數的好處是什麼。 C++中的Lambdas最適合已經填充的容器的STL算法。在你的情況下,你正在尋找用lambda填充矢量results,這不是圖書館打算的東西。你可能會遇到一場艱苦的戰鬥。 http://www.boost.org/doc/libs/1_49_0/doc/html/lambda.html#introduction

話雖這麼說,就可以創建直接飼餵右值的lambda表達式: http://www.boost.org/doc/libs/1_49_0/doc/html/lambda/le_in_details.html#lambda.rvalues_as_actual_arguments 雖然你的情況我不知道的好處將超過,可以採取中所使用的參數的固定功能是什麼組成字符串。另外,我相信線程函數不能返回值,所以你的線程函數將不得不將results.at(i)的位置作爲參數。

+0

我最終將lambda重寫爲boost :: thread的類擴展,並帶上了results.at(i),正如您所提到的。肯定幫了很多,謝謝! –