3

私はSTLプログラミングのより「機能的な」スタイルをピックアップしようとしています、そして次の単純化されたケースがあります

class Widget;

class Zot
{
public:
  std::vector<Widget> Widgets;

  void ProcessAWidget(int x, Widget w) { ... }

  void Process()
  {
      int ctx=123;

      std::for_each(Widgets.begin(), Widgets.end(), 
           std::bind(&Zot::ProcessAWidget, this, ctx, _1));
   }
};

for_each呼び出しの最後のパラメーターを記述するためのより良い方法はありますか?

特に、これは「間違っている」と明示的に言及する必要があり、クラス修飾子を削除することも適切です。

4

3 に答える 3

8

コンパイラがC++11ラムダをサポートしている場合:

std::for_each(Widgets.begin(),
              Widgets.end(),
              [&](Widget& a_w) { ProcessAWidget(ctx, a_w); });
于 2012-08-21T15:52:42.767 に答える
7

救助する子羊:

std::for_each(Widgets.begin(), Widgets.end(),
              [=](Widget & w) { ProcessAWidget(ctx, w); });
于 2012-08-21T15:51:30.893 に答える
2

C ++ 11では、std :: for_eachでラムダ関数を使用できます。これにより、多くの場合、std::bindでプレイする必要のあるゲームよりもコードがはるかに読みやすくなります。

于 2012-08-21T15:52:26.073 に答える