C ++ Для вызова функции-члена в for_each для элементов в контейнере-члене - PullRequest
4 голосов
/ 18 октября 2010

Если у меня есть класс (имитирующий часть контейнера 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 () для вызова Селектор :: prepare_elem ()

Если есть способ, я хотел бы узнать решение без повышения.

1 Ответ

1 голос
/ 18 октября 2010

Если вы не хотите использовать boost :: bind - используйте std :: tr1 :: bind.

...