Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;为成员容器中的每个项在中调用成员函数_C++_Stl_Containers_Member_Mem Fun - Fatal编程技术网

C++ C++;为成员容器中的每个项在中调用成员函数

C++ C++;为成员容器中的每个项在中调用成员函数,c++,stl,containers,member,mem-fun,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 co

如果我有这样一个类(模仿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_;

};
我的问题是,如果我想调用选择器::prepare_elem()来 “继续”中的所有元素?我最初的方法不会编译:


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()来调用 选择器::准备元素()


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

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

您收到的错误消息是什么?FTR,这个问题似乎解决了一个类似的问题。嗯,我没有仔细看你的最后一次尝试就回答了。这应该是有效的,请参见此处编译(错误来自链接器):您是否提供了
prepare\u elem
的实现?否则,就没有问题了。

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