如何在现代C++(C++17/C++20)中将enum转换为字符串
大家好,同事们!我正在用C++17编写一个程序,遇到了一个问题:我需要以可读的形式输出枚举(enum)的值,但C++的标准工具没有提供直接将enum转换为字符串的方法。
以下是我的代码示例:
```cpp
enum class Color {
Red,
Green,
Blue,
Yellow
};
int main() {
Color c = Color::Green;
// 我想输出"Green",但只得到一个数字
std::cout << static_cast(c); // 输出1
return 0;
}
```
在我的实际任务中,枚举包含大约20个值,我想用它来进行日志记录和用户界面。目前我写了一个巨大的switch-case,但这很糟糕——每次添加新值时都需要在5个地方修改代码。
我知道C++没有像Java或C#那样的反射,但也许有一些现代的方法可以优雅地实现这一点?我听说过宏、Boost.Preprocessor、模板魔法,甚至C++20的concepts。但我还是个新手,有点迷