C++ 包装枚举类型
C++的枚举类型与C中的枚举类型基本是一样的,它可与int类型隐式转换。但是并不等价于int类型,关于这部分的详细介绍请参考:《C++ 枚举类型的思考》
要对枚举类型进行检查必须在编译阶段想办法实现,一旦进入运行阶段枚举值就会被用整数来代替,但不一定是int类型,有可能是char、short等。
今天我想说的是,在C++中怎样来包装枚举类型让我们使用起来像用强类型一样安全。起始以下代码也不是本人发明的,而是从一个开源项目的源代码中发现的。将其摘抄出来做个笔记以便复习查看,首先是要写一个包装类,具体代码如下:
enum EON { One, Two, Three, Four}; typedef EnumWrapper<EON> TEStype;enum ETW { Fire,Six}; typedef EnumWrapper<ETW> TEWtype;int main(int argc, _TCHAR* argv[]){TEStype tsp;bool isv=tsp.isValid(); //因为每赋值,所以isv为falsetsp=Four;isv=tsp.isValid(); //已经赋值,所以isv为truetsp=4; //编译错误,因为类型不对tsp=Fire; //编译错误,不能将ETW类型的变量赋值给TEStype类型TEWtype wsp;wsp=tsp; //编译错误,类型不符return 0;}