C++ 诡计:输出实际枚举,而不是其值

C++ Trickery : output actual enum, not its value

本文关键字:枚举 诡计 输出 C++      更新时间:2023-10-16

可能的重复项:
C++:将枚举值打印为文本

假设我有一个枚举:

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

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

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

无需在 c++ 中键入

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;
}