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 lambda:

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

Lambdas 来拯救:

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

在 C++11 中,您可以将 lambda 函数与 std::for_each 一起使用,这通常使代码比您必须使用 std::bind 玩的游戏更具可读性。

于 2012-08-21T15:52:26.073 回答