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

标签 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()?

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

最佳答案

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

关于C++ 为成员容器中的项调用for_each中的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3956832/

相关文章:

c++ - std::vector - 线程安全和调整大小选项

c++ - streambuf、ostream、ostreambuf、istream、istreambuf 和关联的迭代器

c++ - 如何查找给定键是否存在于 C++ std::map 中

session - 如何在 Openshift3 中禁用粘性 session

c++ - 错误 : C++ unresolved external symbol

c++用std::string读写结构数组到二进制文件

c++ - 指向对象数组的指针需要公共(public)析构函数

c++ - 直接访问STL "set"的元素

node.js - AWS Lambda 容器销毁事件

docker - 如何向 OpenShift/Kubernetes 部署提供环境信息(如外部服务 URL 或密码)?