admin管理员组文章数量:1443539
C/C++获取枚举值名称
- 首先,COLOR_ENUM宏定义了一个枚举列表模板,这是一个X宏技巧,它允许我们用不同的方式重用同一个枚举列表。
#define COLOR_ENUM(X) \
X(RED) \
X(GREEN) \
X(BLUE)
2 DECLARE_ENUM宏用于生成枚举定义
代码语言:c代码运行次数:0运行复制#define DECLARE_ENUM(name) name,
3 定义枚举变量
代码语言:c代码运行次数:0运行复制enum Color { COLOR_ENUM(DECLARE_ENUM) };
当这个宏与COLOR_ENUM组合使用时:预处理器会展开为:
代码语言:c代码运行次数:0运行复制enum Color {
RED,
GREEN,
BLUE
};
4 定义ENUM_CASE宏;用于生成switch语句的case分支:
这里的#name是字符串化操作符,它会将宏参数转换为字符串字面量。
代码语言:c代码运行次数:0运行复制#define ENUM_CASE(name) case name: return #name;
5 xx_to_string 函数定义
代码语言:c代码运行次数:0运行复制const char *color_to_string(enum Color color) {
switch (color) {
COLOR_ENUM(ENUM_CASE)
default:
return "UNKNOWN";
}
}
预处理器会展开为
代码语言:c代码运行次数:0运行复制const char *color_to_string(enum Color color) {
switch (color) {
case RED: return "RED";
case GREEN: return "GREEN";
case BLUE: return "BLUE";
default:
return "UNKNOWN";
}
}
这种实现的优点是:
- 维护方便:只需要在COLOR_ENUM宏中添加或删除枚举值,所有相关代码都会自动更新
- 避免重复:不需要手动维护枚举值和字符串的对应关系
- 编译时检查:如果漏掉了某个枚举值,编译器会给出警告
- 性能好:使用switch语句比查表更快
- 内存效率高:字符串直接存储在代码段,不需要额外的运行时数据结构
缺点是:
- 宏的使用使代码不太直观
- 调试时可能不太方便,因为需要查看预处理后的代码
- 所有枚举值必须在同一个地方定义
本文标签: CC获取枚举值名称
版权声明:本文标题:CC++获取枚举值名称 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1748151049a2817022.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论