C++ 中,直接打印枚举的名称
在 C++ 中,直接打印枚举的名称并不容易,因为枚举本质上是整数类型,编译后的程序不会保存枚举名称的字符串形式。但是,有一些方法可以实现这个功能。
方法 1:手动映射(常用方法)
使用一个映射表或 switch
语句,将枚举值与其对应的名称关联起来。
#include <iostream>
#include <string>
enum Color {
RED,
GREEN,
BLUE
};
std::string colorToString(Color color) {
switch (color) {
case RED: return "RED";
case GREEN: return "GREEN";
case BLUE: return "BLUE";
default: return "UNKNOWN";
}
}
int main() {
Color c = GREEN;
std::cout << "Color: " << colorToString(c) << std::endl;
return 0;
}
方法 2:使用宏生成映射
通过宏定义枚举和其对应的字符串。
#include <iostream>
#include <string>
#define ENUM_TO_STRING(ENUM) #ENUM
enum Color {
RED,
GREEN,
BLUE
};
const char* colorToString(Color color) {
switch (color) {
case RED: return ENUM_TO_STRING(RED);
case GREEN: return ENUM_TO_STRING(GREEN);
case BLUE: return ENUM_TO_STRING(BLUE);
default: return "UNKNOWN";
}
}
int main() {
Color c = BLUE;
std::cout << "Color: " << colorToString(c) << std::endl;
return 0;
}
方法 3:C++11 std::map
映射
通过 std::map
映射枚举值和名称。
#include <iostream>
#include <map>
#include <string>
enum Color {
RED,
GREEN,
BLUE
};
std::map<Color, std::string> colorMap = {
{RED, "RED"},
{GREEN, "GREEN"},
{BLUE, "BLUE"}
};
int main() {
Color c = RED;
std::cout << "Color: " << colorMap[c] << std::endl;
return 0;
}
方法 4:第三方库(如 magic_enum
)
magic_enum
是一个 C++17/20 库,可以在编译时获取枚举的字符串表示。
#include <iostream>
#include <string>
#include <magic_enum.hpp>
enum class Color {
RED,
GREEN,
BLUE
};
int main() {
Color c = Color::GREEN;
std::cout << "Color: " << magic_enum::enum_name(c) << std::endl;
return 0;
}
magic_enum
的优点是可以自动生成枚举名称,但需要支持 C++17 或更高版本,且需要额外安装此库。
总结
- 如果环境支持,推荐使用
magic_enum
。 - 如果需要兼容性和简单性,可以手动实现映射(如
switch
或std::map
)。
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/18637415,如有侵权联系删除
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义