1、实现方法 在开发中遇到的一个场景,需要自动生成enum class,并且还要有enum与string相互转换函数,当需要扩展enum class的时候,只需要在初始化的时候改动 enum class,不需要改动enum与string相互转换函数,转换函数都是根据enum自动生成。 github tool/enum_class at main · C-CX/toolgithub.com/C-CX/tool/tr...
enum class SubClassType {SubClass1,SubClass2,// 其他子类};std::unordered_map<SubClassType, std::string> enumToString = {{SubClassType::SubClass1, "SubClass1"},{SubClassType::SubClass2, "SubClass2"},// 其他子类};std::unordered_map<std::string, SubClassType> stringToEnum = {{"SubClass1"...
EType::EType( int i ) : CEnumClass<EType>( i ) { } 有了上面的定义就完成了一个枚举类型的定义了,现在我们来分析一下这个类型是否真的能 够解决文章《enum类型的本质》中所提到的所有缺陷和陷阱,同时又不失为真正的枚举含义。 1. 有限常量集合 由于EType类的构造函数是私有的,所以无法在class声明之...
C++11 引入了强类型枚举(strongly typed enumeration),通过enum class或enum struct关键字声明。强类型枚举具有更好的类型安全性,不同枚举之间的值不能直接比较或赋值,除非显式转换。 enum class Color { Red, Green, Blue};Color myColor = Color::Red;// 下面这行代码会导致编译错误,因为Color和int之间...
enum class转整型最安全的做法就是使用std::to_underlying,虽然这玩意C++23才有,但自己写一个也是很简单的。就你期望的用法而言,可以参考标准库future中std::launch的做法,通过重载运算符的方式实现自定义enum class的运算。比如:enum class Foo {...};Foo operator&(Foo lhs, Foo rhs) { using T = typename...
(t<type4::b);//同一个enum类型比較,能够if(t>type5::b);//非同一个enum类型,不能隐式转换为int等值,不嗯呢该比較if((int)t>(int)type5::b)//强制类型转换,能够通过//3、能够指定底层类型enumclasstype6:char{a=1,b=2};enumclasstype7:unsignedint{a=0xFFFFFFFF};//既能够节省空间,又能够...
1) C++98 的 enum是“非域内的”;而 C++11 的 enum class是“域内的”,限制了枚举成员只在域内可见 2) enum class 的缺省潜在类型 (underlying type) 是 int 型,而 enum 没有缺省潜在类型 3) enum class一般总是前置声明,而 enum 只有在指定了潜在类型时才可以是前置声明 参考资料 《Effective Modern ...
枚举类型enum用法 枚举类型enum⽤法 枚举常量是枚举类型中的值,即枚举值。枚举类型是⼀种⽤户定义的类型,只有⽤户在程序中定义它后才能被使⽤。⽤户通常利⽤枚举类型 定义程序中需要使⽤的⼀组相关的符号常量。枚举类型的定义格式为: enum <枚举类型名> {<枚举表>}; 它是⼀条枚举类型定义语句...
#include enum Season { spring, summer=100, fall=96, winter }; typedef enum { Monday...sizeof p = %d\n",sizeof(p)); /* Season */ printf(...
publicenum Days :byte { Monday=1, Tuesday=2, Wednesday=3, Thursday=4, Friday=5, Saturday=6, Sunday=7 } 枚举类型一定是继承自 byte、sbyte、short、ushort、int、uint、long 和 ulong 中的一种,不能是其它类型。下面是几个枚举的常见用法(以上面的 Days 枚举为例): ...