【问题标题】:C++ Trickery : output actual enum, not its value [duplicate]C ++诡计:输出实际枚举,而不是它的值[重复]
【发布时间】:2011-12-12 21:05:15
【问题描述】:

可能重复:
C++: Print out enum value as text

假设我有一个枚举:

typedef enum MyEnum_
{
  MY_ENUM_BLUE,
  MY_ENUM_RED,
  MY_ENUM_GREEN
} MyEnum;

而且我有一个获取“MyEnum”作为参数的方法。我想将 MyEnum 的值写入日志文件,但我不希望 0、1 或 2 出现在那里---我想输出实际的枚举字符串“MY_ENUM_xxxx”,当然 没有 switch/case 块.....并单独处理每个值。

是否有一些技巧或模式,在 c++ 中或使用宏可以帮助我实现这一目标?

【问题讨论】:

  • 我相信这些是编译器常量,而不是编译到代码中,不像 Java 和 C# 有类型的元数据。
  • 我知道,这就是为什么我还询问是否有围绕此的技巧宏方法,这将减轻每个案例对冗长 switch/case 块的需要......

标签: c++


【解决方案1】:

在c++中无需typedef

enum MyEnum_
{
  MY_ENUM_BLUE,
  MY_ENUM_RED,
  MY_ENUM_GREEN
} MyEnum;

#define TOSTR(x) #x

const char *names[]={TOSTR(MY_ENUM_BLUE),
               TOSTR(MY_ENUM_RED),
               TOSTR(MY_ENUM_GREEN)};

int main(int argc, char *argv[])
{
   MyEnum_ e=MY_ENUM_RED;

   std::cout << names[e] << std::endl;

   return 0;
}

【讨论】:

  • enum ... {} MyEnum; 没有声明一个名为 MyEnum 的全局对象吗?写enum MyEnum {};不是更简单吗?
  • 请注意,如果值是手动分配而不是由编译器按顺序生成的,这种情况会很微妙。
  • @AndréCaron - 非常正确 - 我只是 c&p OP 的代码
猜你喜欢
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多