C++自定义枚举类


C++
枚举类型中,枚举的名称全数暴露于一般范围中,因此两个不同的枚举,不可以有相同的枚举名。例如:

enum Side{ Right, Left };

enum Thing{ Wrong, Right };

在编译时会产生编译错误,不能一起使用。

 

C++11 引进了一种特别的"枚举类",可以避免上述的问题。参见我的上一篇博客《C++11》。

但是在VC2012中尚不支持该特性。幸运的是,我们可以通过多写几行代码曲线实现一个枚举名称可重名的枚举类型。废话少话,奉上代码:

namespace _EnumRecordType

{

    enum E

    {

        recTypeIris,

        recTypeFace,

    };

}

typedef _EnumRecordType::E EnumRecordType;

 

使用时可以像下面这样使用:

EnumRecordType type = EnumRecordType::recTypeIris;

 

这样实现在VC2012下可以顺利编译,但在VC2010上则会产生C4482的警告:

warning C4482: nonstandardextension used: enum '_EnumRecordType::Enum' used in qualified name

可以在namespace声明的前面加入如下代码,以去掉警告:

#if defined(_MSC_VER)&& _MSC_VER < 1700

#pragma warning(disable: 4482)

#endif

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值