【发布时间】:2015-07-09 01:06:59
【问题描述】:
所以我有这个查询,其中说我有一个枚举和一个看起来像这样的结构,
enum fields {
field_1,
field_2
};
struct my_struct {
int field_1;
int field_2;
};
我的具体需求是,给定带有结构成员名称(field_1、field_2 等)的枚举,我应该能够生成一个可以将结构成员设置为给定值的宏。
#define my_macro (__a, __field) \
__a.__field = 1;
那么有没有办法像这样调用 my_macro:
struct my_struct b;
/* extract members of enum as string literals */
my_macro(b, /*field name from the enum */);
很少有其他详细说明 boost 宏用法的帖子可以帮助我将枚举成员提取为字符串 (How to convert an enum type variable to a string?)。问题是以适当的方式将其传递给宏。
【问题讨论】:
-
嗯,你试过了吗?
-
请选择一种语言:C 或 C++。
-
宏仅在编译时进行评估和扩展。如果我正确阅读了您的问题,则您要求的是在运行时确定的内容。在这种情况下,宏将不起作用。您需要另一种解决方案,例如
std::map包含指向知道如何根据需要读取/写入各个结构字段的函数的指针。 -
你想解决什么问题?我认为使用语言而不是宏可能有更好的方法。
-
@simon_says:你应该忘记这一点。虽然您可以在 C++ 中像 C 一样编程,但实际上不应该。即使是相似的语法也可能有细微的差异,这会使调试变得非常困难。