C ++在for_each中为成员容器中的项调用成员函数

时间:2010-10-18 05:46:04

标签: c++ stl containers member mem-fun

如果我有一个类(模仿一些STL的容器),就像这样:


class Elem {
public:
  void prepare(); // do something on *this
  // ...

};

class Selector {
public:
  typedef vector<Elem *> container_type;
  typedef container_type::iterator iterator;

  iterator begin() { return cont_.begin(); }
  iterator end() { return cont_.end(); }

  void check_all();

private:
  prepare_elem(Elem *p); // do something on 'p'
  container_type cont_;

};

如果我想为'cont_'中的所有元素调用prepare(),我可以 以下功能:


void Selector::check_all() {
  for_each(cont_.begin(), cont_.end(), mem_fun(&Elem::prepare));

}

我的问题是,如果我想调用Selector :: prepare_elem(),该怎么办? 'cont_'中的所有元素?我最初的方法不会编译:


void Selector::check_all() {
  for_each(cont_.begin(), cont_.end(),
           mem_fun(&Selector::prepare_elem));

}

第二种方法也失败了:


void Selector::check_all() {
  for_each(cont_.begin(), cont_.end(),
           bind1st(mem_fun(&Selector::prepare_elem), this));
}

无论如何都要使用std :: for_each()来调用 选择器:: prepare_elem()?

如果有办法,我想知道没有提升的解决方案。

1 个答案:

答案 0 :(得分:1)

如果你不想使用boost :: bind - 请使用std :: tr1 :: bind。