加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C在for_each中为成员容器中的项调用成员函数

发布时间:2020-12-16 06:55:00 所属栏目:百科 来源:网络整理
导读:如果我有一个类(模仿一些STL的容器),就像这样: class Elem {public: void prepare(); // do something on *this // ...};class Selector {public: typedef vectorElem * container_type; typedef container_type::iterator iterator; iterator begin() { re
如果我有一个类(模仿一些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));

}

我的问题是,如果我想调用Selector :: prepare_elem(),该怎么办?
‘cont_’中的所有元素?我最初的方法不会编译:

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

}

第二种方法也失败了:

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

无论如何使用std :: for_each()来调用
选择:: prepare_elem()?

如果有办法,我想知道没有提升的解决方案.

解决方法

如果你不想使用boost :: bind – 请使用std :: tr1 :: bind.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读