枚举结构的成员?

Mik*_*ike 5 c c++ enumeration

有没有办法枚举C ++或C中的结构(struct |类)的成员?我需要获取成员名称,类型和值。之前,我在一个小型项目中使用了以下示例代码,该项目在全局范围内。我现在遇到的问题是,需要将一组值从GUI复制到对象,文件和VM环境。我可以创建另一个“穷人”的反射系统,或者希望有一个我还没有想到的更好的东西。有人有想法吗?

编辑:我知道C ++没有反射。

union variant_t {
   unsigned int  ui;
   int           i;
   double        d;
   char*         s;
};

struct pub_values_t {
   const char*      name;
   union variant_t* addr;
   char             type;  // 'I' is int; 'U' is unsigned int; 'D' is double; 'S' is string
};

#define pub_v(n,t) #n,(union variant_t*)&n,t
struct pub_values_t pub_values[] = {
   pub_v(somemember,  'D'),
   pub_v(somemember2, 'D'),
   pub_v(somemember3, 'U'),
   ...
};

const int no_of_pub_vs = sizeof(pub_values) / sizeof(struct pub_values_t);
Run Code Online (Sandbox Code Playgroud)

pax*_*977 4

显而易见的是,C 或 C++ 中没有反射。因此没有可靠的方法来枚举成员变量(默认情况下)。

如果您可以控制数据结构,则可以尝试 astd::vector<boost::any>或 a std::map<std::string, boost::any>,然后将所有成员变量添加到向量/映射中。

当然,这意味着所有变量都可能位于堆上,因此这种方法会影响性能。使用 std::map 方法,这意味着您将有一种“穷人”的反思。