在python中,有一个名为getattr的函数,如下所示:
class MyObject():
def __init__(self):
self.xyz = 4
obj = MyObject()
getattr(obj, 'xyz')
对getattr的调用将返回4.
在C ++(非Visual C ++)中是否有类似的方法?
是否有任何具有此功能的库我可以使用字符串查找对象的成员变量?
我试图找到一种在C ++类中查找公共数据成员的方法,我无法更改。所以我不能使用地图将字符串文字映射到值。也许就像用宏观'unstringify'一样?
答案 0 :(得分:11)
您所要求的通常被称为 Introspection 。
C ++语言本身不支持内省。你可以模仿它,但这就是它的范围。
您建议的API中还有另一个问题:您将如何制定方法的返回类型?那里的是一个适合存储项目的boost::any
类,但是如果你不知道它的类型,你将无法使用它。
答案 1 :(得分:4)
标准C ++中不存在这样的情况。考虑结构或类实际如何工作:
struct MyStruct {
int a;
int b;
};
假设int
的大小为32位,则MyStruct
的{{1}}的位置始终距离b
的位置为4个字节。 偏移算法由编译器预先处理。这就是为什么C访问成员数据的速度如此之快:没有运行时查找!
因此,如果我想在运行时查找a
,我必须找到结构中的位置。要做到这一点,编译器必须生成一个偏移表来存储在代码中的某个地方。对于一种意味着没有任何隐藏的低效率的语言来说,这是一个很大的开销。
答案 2 :(得分:0)
不幸的是,我不知道。这需要编译器的特殊支持,因为当前的编译器不存储这种反射所需的任何类型的元数据