【发布时间】:2021-09-26 00:14:11
【问题描述】:
有没有办法在 C++ 或 C 中枚举结构(结构 | 类)的成员?我需要获取成员名称、类型和值。我之前在一个变量是全局范围的小项目中使用过以下示例代码。我现在遇到的问题是需要将一组值从 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);
【问题讨论】:
-
C++ 没有反射。见stackoverflow.com/questions/359237/…
-
感谢您的反馈。我知道 C++ 没有反射。
-
@Mike 如果您知道 C++ 没有反射,那么不会立即使问题变得无用吗?你怎么能在没有某种反思的情况下枚举你所要求的任何东西(内置于语言中或滚动你自己的)?
-
@lothar C++ 标准没有定义所有可以用 C++ 完成的事情。例如,在 STL 之前不是标准的字符串类。这并不意味着 C++ 程序不能使用字符串。
-
@Mike:这是一个糟糕的比较。标准库中可用的内容与语言本身中可用的内容之间存在巨大差异。 (即标准库在语言本身中实现)。 std::string 没有提供您自己无法实现的东西。反射是一个完全不同的蜡球。
标签: c++ c enumeration