class Example { AnotherClass member1; AnotherClass member2; YetAnotherClass member3; ... };
是否有简短/简洁的方式来做类似的事情:
foreach(member m: myExample) m.sharedMethod();
而不是单独访问每一个?
我想我可以将它们放在一个向量中并使用shared_ptr获得相同的效果,我只是想知道是否说,Boost或其他一些流行的库没有自动执行此操作.
原则上,您可以像这样添加模板成员:
template<typename Functor> void doAllMembers(Functor &f) { f(member1); f(member2); f(member3); }
那就是说,我认为这是一个破碎的设计;你已经离开并公开了所有内部成员.如果您稍后添加一个会怎么样?或者改变一个语义?使一个缓存的值有时会过时?等等,如果您的成员并非都从相同类型继承,会发生什么?
退后一步,重新考虑你的设计.