std :: for_each、参照パラメーターを使用してメンバー関数を呼び出す

StackOverflow https://stackoverflow.com/questions/637441

  •  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アルゴリズムでこれを達成する方法の例を示しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top