<分区>
Possible Duplicate:
Enum to string : return the enum integer value if invalid / not found
简而言之,我的(工作)定义代码是这样的:
enum Gadget
{
First,
Second,
};
const char* gadget_debug_names[] = {
"First",
"Second",
// note: strings are same as enum tokens here, but bonus points if
// they can optionally be given different values
};
但是,如果信息位于必须手动维护的多个独立位置,则很容易出错。 (在某些情况下,在代码库中,我正在处理这两个 - 或更多 - 当前甚至不在同一个文件中的地方。)所以只命名这些东西一次真的很好。
现在我们可以使用代码生成和声明性数据文件来完成此操作,但如果有更好的方法,我不希望在现有构建过程中添加其他步骤。如果有类似的东西就完美了
DEFINE_GADGET(First)
DEFINE_GADGET(Second)
(如果需要,可选择使用启动/停止宏)但是,由于宏只是纯文本替换,我想不出任何方法让预处理器在写出枚举定义时“记住”标记。
我认为这也可以通过元编程来实现,但我不知道该怎么做。我在那里看到的所有示例都涉及递归构建数据结构。我可以看到如何以这种方式构建字符串数组,但我不确定如何传递 token 名称或如何构建枚举。 (当然,仅使用元编程来构建字符串数组是非常荒谬的。)
有没有办法让我在这里保持 DRY,而不使用代码生成?