如何在成员函数上使用std :: for_each

时间:2012-08-21 15:48:45

标签: c++ stl

我想尝试更多'功能'的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调用编写最后一个参数?

特别是必须明确提到这种感觉“错误”,而放弃类限定符也会很好。

3 个答案:

答案 0 :(得分:8)

如果编译器支持C ++ 11 lambdas:

std::for_each(Widgets.begin(),
              Widgets.end(),
              [&](Widget& a_w) { ProcessAWidget(ctx, a_w); });

答案 1 :(得分:7)

Lambdas救援:

std::for_each(Widgets.begin(), Widgets.end(),
              [=](Widget & w) { ProcessAWidget(ctx, w); });

答案 2 :(得分:2)

在C ++ 11中,你可以使用带有std :: for_each的lambda函数,这通常会使代码比你用std :: bind所玩的游戏更具可读性。