新闻中心
c++怎么将enum转换为字符串_c++枚举类型与字符串互转方法
使用std::map、数组索引、宏定义或现代C++模板可实现C++枚举与字符串互转,其中map适用于任意枚举,数组适合连续值,宏减少重复代码,大型项目推荐宏或生成工具以提升维护性。

在C++中,枚举(enum)是常用的数据类型,用于定义一组命名的整数常量。但标准C++没有内置机制将枚举值直接转换为字符串。要实现枚举与字符串互转,需要手动编写映射逻辑。下面介绍几种实用方法。
1. 使用std::map或unordered_map进行映射
最直观的方法是使用 std::map 或 std::unordered_map 建立枚举值与字符串之间的双向映射。
示例:
// 定义枚举 enum class Color { Red, Green, Blue };// 枚举转字符串
const std::map
// 字符串转枚举 const std::map<:string color> stringToColor = { {"Red", Color::Red}, {"Green", Color::Green}, {"Blue", Color::Blue} };
// 转换函数 std::string enumToString(Color c) { auto it = colorToString.find(c); return it != colorToString.end() ? it->second : "Unknown"; }
Color stringToEnum(const std::string& s) { auto it = stringToColor.find(s); if (it != stringToColor.end()) { return it->second; } throw std::invalid_argument("Invalid color string"); }
2. 使用数组索引(适用于从0开始的连续枚举)
如果枚举值是从0开始连续递增的,可以用数组方式快速转换。
enum Color { Red, Green, Blue, ColorCount // 用于标记数量 };const char* colorNames[] = { "Red", "Green", "Blue" };
std::string toString(Color c) { if (c >= ColorCount) return "Unknown"; return colorNames[c]; }
Color toEnum(const std::string& name) { for (int i = 0; i (i); } throw std::invalid_argument("Invalid color name"); }
3. 使用宏或代码生成简化维护
当枚举项较多时,手动维护映射容易出错。可以使用宏定义“X-Macro”技巧统一管理。
#define COLOR_LIST \ X(Red) \ X(Green) \ X(
Blue)
enum class Color {
Pinokio
Pinokio是一款开源的AI浏览器,可以安装运行各种AI模型和应用
232
查看详情
define X(name) name,
COLOR_LIST
undef X
};
const char* colorToString(Color c) { switch (c) {
define X(name) case Color::name: return #name;
COLOR_LIST
undef X
} return "Unknown";
}
这种方法通过一个宏定义同时生成枚举和字符串转换逻辑,减少重复代码。
4. C++17及以后:结合if constexpr和模板(进阶)
利用现代C++特性可实现更通用的转换工具,比如配合反射库或用户自定义字面量,但原生C++仍需手动映射。
基本上就这些常见做法。选择哪种方式取决于项目需求:简单场景用数组或map,大型项目建议用宏或外部代码生成工具来保证一致性与可维护性。
以上就是c++++怎么将enum转换为字符串_c++枚举类型与字符串互转方法的详细内容,更多请关注其它相关文章!
# 可以用
# 荆门留学网站推广公司
# 汉口h5网站建设
# 质量信用网站建设流程
# 睢宁seo优化推广公司
# 滨海seo教程
# 新乡商城网站建设价格
# 农业推广营销方案
# 网站站群建设作文
# 网站内部优化做法
# 佛山环保seo优化方法
# 相关文章
# 是从
# 工具
# 见性
# 进阶
# 如何用
# 多线程
# 如何使用
# 适用于
# 转换为
# red
# switch
# c++
# mac
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】
Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
C++ map遍历方法大全_C++ map迭代器使用总结
c++20的std::jthread是什么_c++可中断线程与RAII式管理
J*aScript设计模式实践_j*ascript代码优化
实现分段式页面滚动导航:CSS与J*aScript教程
邮政快递单号查询入口 邮政快递物流信息在线查询入口
AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看
2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享
Angular Material 垂直步进器:实现底部到顶部排序的教程
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖
Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践
PDF文件体积过大处理_PDF压缩技巧详解
b站怎么看视频的弹幕数量_b站弹幕数量查看方法
Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示
反效果?《战地6》免费试玩开启后玩家数不升反降
如何使用Go和Martini动态服务解码后的图片
excel怎么制作工资条 excel快速生成工资条的方法
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
德邦快递查询平台 德邦快递物流信息查询入口
怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】
QQ邮箱登录首页官网地址2026 QQ邮箱官方网页入口
微信网页版扫码登录入口 微信网页版二维码登录入口
如何在网页中实现特定地点的随机图片展示
抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩
Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧
J*aScript类型检查_j*ascript代码规范
《GTA6》开发画面疑似泄露!这次可不是AI了
如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit
Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略
一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证
深入理解J*aScript Promise异步执行与微任务队列
《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!
苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】
解决Flask中Quill编辑器内容提交失败及TypeError的指南
Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践
快手赚钱渠道_快手收益来源
《刺客信条:影》PS5 Pro和Switch 2画面对比
妖精动漫免费平台 妖精动漫官网资源观看网址
12306选座怎么选到商务座_12306商务座选择与配置说明
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
126邮箱手机版登录官网2026_126手机邮箱免费入口最新
qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程
抖音怎么赚钱_抖音创作者变现方法与途径指南
漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端
在J*a项目里如何构建对象之间的契约_接口约束的实际落地
新手怎么开始学化妆 零基础化妆入门教程
批改网学生版PC登录 批改网官网登录系统入口


2025-10-29
浏览次数:次
返回列表