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

C:迭代所有对象的成员?

发布时间:2020-12-16 04:56:32 所属栏目:百科 来源:网络整理
导读:假设我有一个包含许多成员的对象: class Example { AnotherClass member1; AnotherClass member2; YetAnotherClass member3; ...}; 是否有简短/简洁的方式来做类似的事情: foreach(member m: myExample) m.sharedMethod(); 而不是单独访问每一个? 我想我
假设我有一个包含许多成员的对象:
class Example {
    AnotherClass member1;
    AnotherClass member2;
    YetAnotherClass member3;
    ...
};

是否有简短/简洁的方式来做类似的事情:

foreach(member m: myExample)
    m.sharedMethod();

而不是单独访问每一个?

我想我可以将它们放在一个向量中并使用shared_ptr获得相同的效果,我只是想知道是否说,Boost或其他一些流行的库没有自动执行此操作.

解决方法

C不支持类内省,所以你不能迭代这样的类中的所有成员 – 不管没有(手动编写)函数,无论如何迭代所有成员.

原则上,您可以像这样添加模板成员:

template<typename Functor>
void doAllMembers(Functor &f) {
  f(member1);
  f(member2);
  f(member3);
}

那就是说,我认为这是一个破碎的设计;你已经离开并公开了所有内部成员.如果您稍后添加一个会怎么样?或者改变一个语义?使一个缓存的值有时会过时?等等,如果您的成员并非都从相同类型继承,会发生什么?

退后一步,重新考虑你的设计.

(编辑:李大同)

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

    推荐文章
      热点阅读