我想尝试更多'功能'的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调用编写最后一个参数?
特别是必须明确提到这种感觉“错误”,而放弃类限定符也会很好。
答案 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所玩的游戏更具可读性。