std :: for_each,使用引用参数调用成员函数

时间:2009-03-12 05:06:44

标签: c++ stl pass-by-reference

我有一个指针容器,我想迭代它,调用一个成员函数,它有一个参数作为参考。如何使用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 with functions that have parameters that are references。这特别询问如何使用boost进行此操作。我问如何在没有提升的情况下完成

修改:有一种方法可以在不使用任何boost的情况下执行此操作。通过使用std::bind和朋友,可以在与C ++ 11兼容的编译器中编写和编译相同的代码,如下所示:

std::for_each(
  sprites.begin(),
  sprites.end(),
  std::bind(&Renderable::render, std::placeholders::_1, std::ref(g))
);

2 个答案:

答案 0 :(得分:5)

<functional>的设计存在问题。你要么必须使用boost :: bind或tr1 :: bind。

答案 1 :(得分:3)

结帐How to use std::foreach with parameters/modification。问题显示了如何使用for循环来完成它。接受的答案给出了如何使用for_each算法实现此目的的示例。