如何在运行时/动态地获取C++类的所有属性/变量

6

在运行时获取一个类的所有变量和方法是否可能?如果是,怎么做呢?我曾经在C#中使用反射实现过这个功能,但现在我正在使用C++。


我有一个用于自定义类的模板。在该模板中,我需要访问类对象的变量。我将动态构建用于数据库操作的查询字符串。根据我的数据库表设计了类变量。因此,如果我能获取所有变量名称和数据,我就能生成所需的查询字符串。 - Asish Biswas
你可以看一下Qt库,它通过预处理器(moc)提供了一些反射能力。 - Luc Touraille
5个回答

6

在C++中,没有办法做到你所要求的。如其他答案所建议的,RTTI可以帮助你,但可能不是你需要的。

如果你能更详细地描述你想要做什么以及为什么需要反射,我们可能可以在C++中提供其他解决方案。


我有一个自定义类的模板,在模板中需要访问类对象的变量。我将动态构建用于数据库操作的查询字符串。我根据我的数据库表设计了类变量。因此,如果我能获取所有变量名称和数据,我就能生成所需的查询字符串。 - Asish Biswas
1
然后您需要在模板中包含构建查询或返回表字段列表的方法。反射API通常不太高效,最好是向模板添加方法以以最适合您需求的方式获取此信息。 - Benoit Thiery

2

你可以在C++中使用RTTI

这只是一个观点:它不像C#的反射API那样简单/直接。

还可以查看SO问题。


1

虽然您可以使用RTTI确定对象的类型,但C ++并非完全反射,您无法获取普通C ++类的方法或变量。


0

我不认为有一种方法可以枚举类的成员。 以前,我也需要完全相同的东西,最终在自己的容器中手动注册了每个感兴趣的成员和每个类。 即使那时,成员也都是相同的基本类型(C#中Object类的替代品)。 然后枚举成员并调用每个成员的基础函数很容易。它有效,并且我很高兴。


我曾经看到过类似的自动化实现,使用了 C 的自定义预处理步骤来提供结构体的反射。 - Sydius

0

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接