【问题标题】:Getting name and type of a struct field from its object从对象中获取结构字段的名称和类型
【发布时间】:2010-03-25 09:44:43
【问题描述】:

例如,我有一个类似这样的结构:

struct Test
{
    int i;
    float f;
    char ch[10];
};

我有这个结构的对象,例如:

Test obj;

现在,我想以编程方式获取 obj 的字段名称和类型。有可能吗?

这是 C++ 顺便说一句。

【问题讨论】:

  • 如果你能得到这个名字,你会怎么做?
  • 必须根据代码生成一些文件。当然,我们可能会解析源代码文件,但我一直在寻找一些看起来不存在的优雅解决方案:(

标签: c++ struct


【解决方案1】:

您要求Reflection in C++

【讨论】:

    【解决方案2】:

    恐怕无法获取字段名,但可以使用Boost.Typeof获取obj的类型:

    #include <boost/typeof/typeof.hpp>
    typedef BOOST_TYPEOF(obj) ObjType;
    

    【讨论】:

      【解决方案3】:

      不写你自己的“结构”系统是不可能的。您可以获取成员的 sizeof,但您需要知道其名称。据我所知,C++ 不允许您在编译或运行时枚举给定对象的成员。您可以使用“GetNumMembers()”和“GetMemberSize(index)”等几个函数来获取您所追求的信息...

      【讨论】:

        【解决方案4】:

        您可能还想在网上搜索“C++ 序列化”,尤其是Boost 库。我还会在 Stack Overflow 上搜索“C++ 序列化”。

        许多 C++ 新手希望从类名创建对象实例或根据名称填写类字段。这就是序列化或反序列化派上用场的地方。

        我需要类名和成员名的经验来自打印调试信息。处理异常时,尤其是生成异常时,类和字段名会很有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-25
          • 2020-11-27
          • 1970-01-01
          • 2017-10-09
          • 2010-09-24
          相关资源
          最近更新 更多