std :: for_each、参照パラメーターを使用してメンバー関数を呼び出す
-
10-07-2019 - |
質問
参照するパラメーターを持つメンバー関数を呼び出して、反復処理するポインターのコンテナーがあります。 STLでこれを行うにはどうすればよいですか?
現在の解決策は、パラメータにboost :: bindとboost :: refを使用することです。
// Given:
// void Renderable::render(Graphics& g)
//
// There is a reference, g, in scope with the call to std::for_each
//
std::for_each(
sprites.begin(),
sprites.end(),
boost::bind(&Renderable::render, boost::ref(g), _1)
);
関連する質問(現在のソリューションの派生元)は boost :: bindがリファレンスであるパラメーターを持つ関数と。これは、ブーストでこれを行う方法を具体的に尋ねます。ブーストせずに 行う方法を尋ねています。
編集:boost
を使用せずにこれと同じことを行う方法があります。 std::bind
およびフレンドを使用することにより、次のようなC ++ 11互換コンパイラで同じコードを記述およびコンパイルできます。
std::for_each(
sprites.begin(),
sprites.end(),
std::bind(&Renderable::render, std::placeholders::_1, std::ref(g))
);
解決
これは、<functional>
の設計に関する問題です。 boost :: bindまたはtr1 :: bindを使用する必要があります。
他のヒント
std :: foreachをparameters / modificationで使用する方法を確認してください。質問は、forループを使用してそれを行う方法を示しています。受け入れられた答えは、for_eachアルゴリズムでこれを達成する方法の例を示しています。
所属していません StackOverflow