使用for_each调用成员函数和成员数据

时间:2010-11-17 19:55:50

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

亲爱的,我想为每个对象调用一个成员函数(需要引用)(比方说)一个属于同一个类的成员的向量,如下面的代码所示:

#include <functional>  
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;

struct Stuff {
  double x;
};

class Test {
public:
  void f1(Stuff & thing);
  void f2(void);
  vector<Stuff> things;
};

void Test::f1(Stuff & thing) {
  ; // do nothing
}

void Test::f2(void) {
  for_each(things.begin(), things.end(), f1);
}

int main(void)
{

  return 0;
}  

此代码给出了与未解析的重载函数类型相关的编译器错误。我也尝试过使用bind,但似乎f1中必需的引用是一个问题。我知道我在这里缺少一些重要的东西,所以我借此机会解决我的问题并学习。目前,我无法安装boost,但我也想知道boost是否有助于解决这个问题。提前致谢。

1 个答案:

答案 0 :(得分:4)

  • 您要调用的功能无法由f1简单识别,但应称为&Test::f1(如:f1的成员函数Test < / LI>
  • 函数f1不接受单个参数:作为任何非静态成员函数,它具有this类型的隐式Test * const参数
  • 最后,标准绑定将无法执行此操作,因为它不处理通过引用传递的参数。

Boost.Bind确实是一个很好的选择:

std::for_each(things.begin(), things.end(), boost::bind(&Test::f1, this, _1));