0

そのような非同期呼び出しにベクトルを渡すにはどうすればよいですか??

std::vector<int> vectorofInts;
vectorofInts.push_back(1);
vectorofInts.push_back(2);
vectorofInts.push_back(3);

std::async([=]
{
    //I want to access the vector in here, how do I pass it in
    std::vector<int>::iterator position = std::find(vectorofInts.begin(), vectorofInts.end(), 2);
    //Do something 
}
4

1 に答える 1

6

[=]キャプチャリストとして指定することにより、ラムダの値ですでにキャプチャしています。したがって、ラムダ本体内で、vectorofIntsそのコピーを参照するために使用できます。[vectorofInts]より明示的にするかどうかを指定できます。[=]ラムダで使用される変数を自動的にキャプチャします。

ただし、ラムダが でない限り、キャプチャされた値を変更することはできませんmutable。したがって、ベクトルは として扱われconst、 をfind返しますconst_iteratoriteratorエラー メッセージ (コメントに投稿) にあるように、 に変換できないためconst_iterator、変数の型をstd::vector<int>::iteratororに変更しますauto

コピーではなくベクター自体にアクセスする場合は、 を指定して参照によってキャプチャする[&][&vectorofInts]、明示的にしたい場合。ただし、そのようにスレッド間で共有する場合は注意し、非同期アクセスが完了するまで破棄しないようにしてください。

于 2014-11-11T12:35:40.877 に答える