从其对象获取struct字段的名称和类型

时间:2010-03-25 09:44:44

标签: c++ struct

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

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

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

Test obj;

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

这是C ++ BTW。

4 个答案:

答案 0 :(得分:9)

您要求Reflection in C++

答案 1 :(得分:4)

我担心您无法获取字段名称,但您可以使用Boost.Typeof获取obj类型:

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

答案 2 :(得分:1)

如果没有编写自己的“struct”系统,那是不可能的。您可以获取成员的sizeof,但您需要知道其名称。据我所知,C ++不允许在编译或运行时枚举给定对象的成员。你可以输入一些功能,如“GetNumMembers()”和“GetMemberSize(index)”等来获取你想要的信息...

答案 3 :(得分:0)

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

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

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