0

Boostのスレッド内でラムダを使用する際に問題が発生しています。

このコードは、関数(文字列)の結果をベクトルの指定されたインデックス内に配置することになっています。

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をサポートするコンパイラをサポートできません。ありがとうございました!

4

1 に答える 1

0

あなたの場合、ラムダ関数の利点は何でしょうか。C ++のラムダは、すでに設定されているコンテナーのSTLアルゴリズムに最適です。あなたの場合、あなたはベクトルresultsにラムダを投入しようとしていますが、これはライブラリが意図しているようなものではありません。あなたは困難な戦いをするかもしれません。 http://www.boost.org/doc/libs/1_49_0/doc/html/lambda.html#introduction

そうは言っても、右辺値が直接供給されるラムダを作成することは可能です: http ://www.boost.org/doc/libs/1_49_0/doc/html/lambda/le_in_details.html#lambda.rvalues_as_actual_arguments 文字列の作成に使用される引数を取ることができる固定関数に比べて、どのようなメリットがあるのか​​わかりません。

さらに、スレッド関数は値を返すことができないと思います。そのため、スレッド関数はresults.at(i)引数としての場所を取得する必要があります。

于 2012-06-06T23:26:49.777 に答える