C++ 用于获取枚举值的名字 Post author:xfxia Post published:2023年12月26日 Post category:其他 template < class Child> 02 class EnumBase 03 { 04 protected : 05 //typedef typename Child::Et Et; 06 struct EnumProperty 07 { 08 const char * mName; 09 int mEt; 10 }; 11 12 public : 13 14 static int toEnum( const char * name) 15 { 16 int size = 0; 17 const EnumProperty * pP = Child::getEnumPropertys(size); 18 for ( int iter = 0;iter < size ; ++ iter) 19 { 20 if ( strcmp (pP[iter].mName,name) == 0) 21 return pP[iter].mEt; 22 } 23 return 0; 24 } 25 26 static const char * toString( int et) 27 { 28 int size = 0; 29 const EnumProperty * pP = Child::getEnumPropertys(size); 30 for ( int iter = 0;iter < size ; ++ iter) 31 { 32 if (pP[iter].mEt == et) 33 return pP[iter].mName; 34 } 35 return 0; 36 } 37 }; 38 39 #define TOSTRING(t) #t 40 #define MAP_TO_STRING(ot) TOSTRING(ot),ot 41 42 class DamageType : public EnumBase<DamageType> 43 { 44 public : 45 enum Et{ 46 Wood = 0x01, 47 Stone = 0x02, 48 Metal = 0x04, 49 Ice = 0x08, 50 Other = 0x10, 51 DamageAdditionEnd = 0x20, 52 }; 53 struct x{}; 54 55 static const EnumProperty* getEnumPropertys( int &size) 56 { 57 const static EnumProperty __[] = 58 { 59 {MAP_TO_STRING(Wood)}, 60 {MAP_TO_STRING(Stone)}, 61 {MAP_TO_STRING(Metal)}, 62 {MAP_TO_STRING(Ice)}, 63 {MAP_TO_STRING(Other)}, 64 }; 65 66 size = sizeof (__)/ sizeof (__[0]); 67 return __; 68 } 69 }; 70 int main() 71 { 72 printf ( "%d\n" ,DamageType::toEnum( "Wood" )); 73 printf ( "%d\n" ,DamageType::toEnum( "Stone" )); 74 printf ( "%d\n" ,DamageType::toEnum( "Metal" )); 75 printf ( "%d\n" ,DamageType::toEnum( "Ice" )); 76 printf ( "%d\n" ,DamageType::toEnum( "Other" )); 77 78 printf ( "%s\n" ,DamageType::toString(DamageType::Wood)); 79 printf ( "%s\n" ,DamageType::toString(DamageType::Stone)); 80 printf ( "%s\n" ,DamageType::toString(DamageType::Metal)); 81 printf ( "%s\n" ,DamageType::toString(DamageType::Ice)); 82 printf ( "%s\n" ,DamageType::toString(DamageType::Other)); 83 return 0; 84 } 你可能也喜欢 深度学习之循环神经网络(12)预训练的词向量 211计算机研究生公务员待遇,211研究生入职公务员2年,晒出月薪后,感叹:当了公务员有什么用?… 在 .html 文件中实现 ElementPlus 国际化 / 日期插件使用的注意事项 查看打印机端口的方法 解决<canvas />在页面重绘的问题 深入浅出React之第四章:推荐的Redux目录结构 QEMU中断设备模拟 C#订阅事件的两种写法(貌似没啥用) 解决element-ui导航栏问题 解决aqua data studio 中文乱码问题 nohup命令及其输出文件 StarUML时序图总结 使用Eclipse RCP进行桌面程序开发(一):快速起步 JMeter 压测指南:解决 Socket closed 异常的实用技巧 [Android开发] 自定义TextView,可以自定义四个方向Drawable的大小、距离文字的距离、设置点击监听等 深度学习技巧应用14-深度学习跨框架应用,ONNX实现模型互操作性 NBIA Data Retriever(NBIA数据下载工具)使用 SpringMVC中使用@RestControler和@Controller修饰controller返回结果的区别 Rstudio-server、Rshiny-server、ggplot2中文乱码解决方法 http 请求 超时时间设置