【问题标题】:How to get all properties/variables of a class at runtime/dynamically in C++如何在运行时/在 C++ 中动态获取类的所有属性/变量
【发布时间】:2010-10-25 18:39:15
【问题描述】:

这是否可以在运行时获取一个类的所有变量和方法? 如果是,那怎么办? 我在 C# 中使用反射做到了这一点。但现在我正在使用 C++。

【问题讨论】:

  • 我有一个自定义类的模板。在该模板中,我需要访问类对象的变量。我将为数据库操作动态构建一个查询字符串。我根据我的数据库表设计了类变量。所以,如果我能得到所有的变量名和数据,我就能生成我需要的查询字符串。
  • 你可以看看 Qt 库,它通过使用预处理器 (moc) 提供了一些反射功能。

标签: c++


【解决方案1】:

没有办法在 C++ 中执行您所要求的操作。正如其他答案中所建议的那样,RTTI 可以帮助您,但可能不是您所需要的。

如果您更详细地描述您正在尝试做什么以及为什么需要反射,我们可能会建议其他 C++ 解决方案。

【讨论】:

  • 我有一个自定义类的模板。在该模板中,我需要访问类对象的变量。我将为数据库操作动态构建一个查询字符串。我根据我的数据库表设计了类变量。所以,如果我能得到所有的变量名和数据,我就能生成我需要的查询字符串。
  • 那么你需要你的模板来包含查询的构建或一些方法来返回你的表的字段列表。反射 API 通常效率不高,最好在模板中添加方法,以便以最适合您需求的方式获取此信息。
【解决方案2】:

您可以在 C++ 中使用RTTI

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

另请查看this SO 问题。

【讨论】:

    【解决方案3】:

    虽然您可以使用 RTTI 确定对象的类型,但 C++ 不是完全反射的,您无法使用普通的 C++ 类来确定它具有哪些方法或变量。

    【讨论】:

      【解决方案4】:

      我认为没有办法枚举一个类的成员。不久前,我需要同样的东西,最后通过在我自己的容器中手动注册每个成员和每个感兴趣的类来解决。即便如此,成员都是相同的基本类型(替换 C# 中的 Object 类)。枚举成员并调用每个成员的基本函数很容易。它有效,我很高兴。

      【讨论】:

      • 我已经看到了类似的自动化,它使用 C 的自定义预处理步骤来提供结构的反射。
      猜你喜欢
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 2022-11-10
      • 2018-12-28
      • 2012-07-13
      • 1970-01-01
      相关资源
      最近更新 更多