gpt4 book ai didi

C++:遍历一个对象的所有成员?

转载 作者:可可西里 更新时间:2023-11-01 18:09:33 31 4
gpt4 key购买 nike

假设我有一个包含很多成员的对象:

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com