如果我有一个像这样的类(模仿一些 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));
}
我的问题是,如果我想为 'cont_' 中的所有元素调用 Selector::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() 来调用 Selector::prepare_elem()?
如果有办法,我想知道没有提升的解决方案。