C++ C++;为成员容器中的每个项在中调用成员函数
如果我有这样一个类(模仿STL的一些容器):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
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));
}