C++ To call member function in for_each for items in the member container

徘徊边缘 提交于 2019-12-23 12:09:51

问题


If I have a class (that mimic some of STL's container) like this:


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_;

};

If I want to call prepare() for all elements in 'cont_', I could make the following function:


void Selector::check_all() {
  for_each(cont_.begin(), cont_.end(), mem_fun(&Elem::prepare));

}

My question is, what if I want to call Selector::prepare_elem() for all elements in 'cont_'? My initial approach won't compile:


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

}

Second approach also failed:


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

Is there anyway to use std::for_each() to call Selector::prepare_elem()?

If there's way, I'd like to know a solution without boost.


回答1:


If you don't want to use boost::bind - use std::tr1::bind.



来源:https://stackoverflow.com/questions/3956832/c-to-call-member-function-in-for-each-for-items-in-the-member-container

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!