假设我有一个包含很多成员的对象:
class Example {
AnotherClass member1;
AnotherClass member2;
YetAnotherClass member3;
...
};
是否有一种简短/简洁的方法来做类似的事情:
foreach(member m: myExample)
m.sharedMethod();
而不是单独访问每一个?
我想我可以把它们放在一个 vector 中并使用 shared_ptr
来达到同样的效果,我只是想知道 Boost 或其他一些流行的库是否没有自动执行此操作的功能.
最佳答案
C++ 不支持类自省(introspection),因此您不能像那样遍历类中的所有成员 - 除非没有(手动编写的)函数为您遍历所有成员。
原则上,您可以像这样添加一个模板成员:
template<typename Functor>
void doAllMembers(Functor &f) {
f(member1);
f(member2);
f(member3);
}
也就是说,我会认为这是一个错误的设计;您已经公开暴露了所有内部成员。如果您稍后添加一个会怎样?或者改变一个的语义?使一个有时过时的缓存值?等等。此外,如果您的成员并非都继承自同一类型,会发生什么情况?
退后一步,重新考虑您的设计。
关于C++:遍历一个对象的所有成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7142532/