如何解决c++11实现枚举值到枚举名的转换问题
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这篇文章主要介绍如何解决c++11实现枚举值到枚举名的转换问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果ENUM_DEFINE ( Color, Red,
千家信息网最后更新 2025年02月06日如何解决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安全错误
数据库的锁怎样保障安全
银行网络安全隐患的危害
网络安全纵深防御什么意思
类药性预测数据库
网络安全班心得体会
网络技术安全研究生
软件开发 人工成本 验证
计算机网络技术 孙秀娟
数据库破译
卫士通网络安全产品价格
数据库中的基本单位是
做驱动需要学什么软件开发
洛阳蓝普网络技术开发公司
阴阳师端游一直在连服务器
视频直播交友app软件开发
qt sql数据库创建
django 修改数据库
连云港品质联想服务器服务商
做软件开发需要什么权限
软件开发培训是多少
服务器 设置用户
单位服务器映射管理
天海传媒网络技术有限公司
数据库可以找到工作吗
nuget服务器
爬虫保存数据库
360数据库报错
计算机网络技术要什么基础
软件开发中业务需求怎么写
厦门大学数据库讲座
数据库安全机制的5个层级