C++ Для вызова функции-члена в for_each для элементов в контейнере-члене
Если у меня есть класс (который имитирует некоторые контейнеры 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 () для всех элементов в cont_, я мог бы сделать следующую функцию:
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 () для вызова Selector:: prepare_elem ()?
Если есть способ, я хотел бы узнать решение без повышения.
1 ответ
Если вы не хотите использовать boost::bind - используйте std::tr1::bind.