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