可能重复:
枚举到字符串:如果无效/未找到,则返回枚举整数值
简而言之,我拥有的(工作)定义代码是这样的:
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)
(如果需要,可以选择使用启动/停止宏)但是,由于宏只是纯文本替换,我想不出任何方法让预处理器在写出枚举定义时“记住”标记。
我认为这也可能通过元编程实现,但我不知道如何做到这一点。我在那里看到的所有示例都涉及递归构建数据结构。我可以看到如何以这种方式构建字符串数组,但我不确定如何传入令牌名称或如何构建枚举。(当然,仅仅使用元编程来构建字符串数组是非常荒谬的。)
有什么方法可以让我在这里保持 DRY,而不使用代码生成?