可变参数宏与枚举
来源:互联网 发布:windows7编程32 编辑:程序博客网 时间:2024/05/17 06:56
可变参数的宏与枚举结合会产生什么样子的火花?
问题:
有时候定义了枚举需要知道枚举值对应的字符串表达,有点像反射的机制。该如何简洁的实现而又不容易出错?
基础设施
#define ENUM_ENTRY(NAME, VALUE) NAME = VALUE,#define TOSTRING(ARG) #ARG#define ENUM_STR_ENTRY(NAME, VALUE) \ case VALUE: { \ return TOSTRING(NAME); \ } break;#define ENUM_ENUMERATION(NAME, ITEM_LIST)\ struct NAME##EnumDef{\enum Enum { ITEM_LIST(ENUM_ENTRY) };\static std::string ToString(const Enum& value) {\switch (value) {\ITEM_LIST(ENUM_STR_ENTRY); \default: { throw std::exception("Invalid Enum"); } break;\} \}\};
应用:
#define PEOPLE_ITEMS(ITEM_DEF, ...)\ITEM_DEF(Name, 1)\ITEM_DEF(Born, 2)\ITEM_DEF(Nation, 3)ENUM_ENUMERATION(People, PEOPLE_ITEMS)int main(){PeopleEnumDef::Enum val = PeopleEnumDef::Nation;std::cout << PeopleEnumDef::ToString(val); return 0;}
0 0
- 可变参数宏与枚举
- java枚举与可变参数
- 可变参数列表与枚举介绍
- 静态导入,可变参数,枚举与增强型for循环
- 枚举类型 和 可变参数
- ##的意思与可变参数宏
- 条件编译debug与可变参数宏
- 可变参数的函数与宏
- 可变参数与printf
- vprintf 与可变参数
- Foreach与可变参数
- 数组与可变参数
- C#与Java对比学习:数据类型、集合类、栈与队列、迭达、可变参数、枚举
- C#与Java对比学习:数据类型、集合类、栈与队列、迭达、可变参数、枚举
- C#与Java对比学习:数据类型、集合类、栈与队列、迭达、可变参数、枚举
- 参数可变的方法和枚举
- 可变参数和枚举和静态导入
- java__静态导入,可变参数,枚举
- 常用正则表达式--特殊需求
- Symmetry UVA
- 【高并发框架】Disruptor之基础介绍
- 教学手记:如何让学生重视选修课的学习
- caffe-windows编译中出现的【error: MSB3721】解决办法
- 可变参数宏与枚举
- 随记8——AndroidAS多渠道打包
- Ehcache与redis比较
- greenDao多表关联To-Many踩过的坑
- 深度学习物体检测(九)——对象检测YOLO系列总结
- java集合详解
- 【那些年遇到过的面试题】孩子 面试题
- centos下载速度慢的解决办法
- 【UE4】 第11讲 【MOBA制作日记】 HTC Vive设备安装使用及手柄控制漫游