如何解决c++11实现枚举值到枚举名的转换问题
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍如何解决c++11实现枚举值到枚举名的转换问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果ENUM_DEFINE ( Color, Red,
千家信息网最后更新 2026年11月04日如何解决c++11实现枚举值到枚举名的转换问题
这篇文章主要介绍如何解决c++11实现枚举值到枚举名的转换问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
效果
ENUM_DEFINE ( Color, Red, Blue,)EnumHelper(Color::Red) -> "Red"EnumHelper(Color::Red, std::toupper) -> "RED"
关键技术
__VA_ARGS__
__VA_ARGS__ 实现了可变参数的宏。
#define XXX(type, ...) enum class type { __VA_ARGS__ };XXX(Color, Red, Blue) 等价于:
enum class Color{ Red, Blue};#__VA_ARGS__
#__VA_ARGS__ 可将宏的可变参数转为字符串。
#define XXX(type, ...) #__VA_ARGS__
XXX(Color, Red, Blue) 等价于:"Red, Blue"
在函数外执行代码的能力
在函数体外,可以通过定义全局变量来执行一个函数。需要注意的是,头文件中正常是不能进行变量初始化的,除非加上 static 或者 const。
const int temp = initialize();
另外,如果多个代码文件 #include 了该头文件,会产生多个变量,即在不同代码文件取得的 temp 变量不是同一个。与之对应,initialize 函数也会调用多次。
模板函数的静态变量
函数的静态变量可以用于存放枚举值到枚举字符串的映射,而将枚举类型作为模板参数的模板函数,则可以直接为每种枚举提供了一个映射容器。
关键代码
templatestring EnumHelper(T key, const std::function processor = nullptr, const char* pszName = NULL){ static_assert(std::is_enum_v , __FUNCTION__ "'s key need a enum"); static map s_mapName; if (nullptr != pszName) { s_mapName[key] = pszName; } std::string res = ""; auto it = s_mapName.find(key); if (it != s_mapName.end()) res = it->second; if (nullptr != processor) std::transform(res.begin(), res.end(), res.begin(), processor); return res;}template size_t analystEnum(T enumClass, const char* pszNames) static_assert(std::is_enum_v , __FUNCTION__ "'s enumClass need a enum"); cout << "analystEnum: " << pszNames << endl; if (nullptr != pszNames) const vector & vecName = split(pszNames, ","); for (int i = 0; i < vecName.size(); ++i) { if (vecName.at(i).size() > 0) { EnumHelper((T)(i + 1), nullptr, vecName.at(i).c_str() + (i == 0 ? 0 : 1) ); } } return rand(); return rand();#define ENUM_DEFINE(type, ...) enum class type { placeholder, __VA_ARGS__ }; static const size_t g_uEnumSizeOf##type = analystEnum(type::placeholder, #__VA_ARGS__);
以上是"如何解决c++11实现枚举值到枚举名的转换问题"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
函数
变量
代码
文件
参数
模板
问题
关键
内容
多个
字符
字符串
等价
篇文章
静态
可变
不同
价值
全局
兴趣
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云之行互联网科技
互联网金融监管科技数据
互联网科技保险
科技互联网技术
没上市的科技互联网公司
有马互联网科技
中国互联网科技发展
天津摩尔互联网科技
互联网科技中介
福州新华互联网科技学校 知乎
互联网科技寓意
互联网保险科技创业
佛山市拉法互联网科技有限公司
爱医互联网络科技
恒生互联网科技业指数调整周期
中科明德北京互联网科技
黑科技 体验场景 互联网大会
电子商务与互联网科技的关系
互联网时代科技型公司的机会
互联网科技企业商标注意事项
中国 科技 互联网
智网互联网科技
壕鑫互联网络科技
互联网科技公司做什么
互联网经济与金融科技
受益于互联网科技的高速发展
互联网和黑科技的看法
江苏苏星互联网科技有限公司
马化腾互联网科技教学
亚光科技低轨卫星互联网