Morden Enum 巧用C++结构体封装枚举,实现类型安全和操作封装

Morden Enum (现代化的枚举类型)

1. 传统的枚举类型

C++的传统枚举类型定义格式为 enum <枚举名> { <枚举常量表> }
例如:enum workflow_1 { Starting, Connecting, Receiving, Stoped};

这个例子中定义了项目中一个业务流程的四个状态,Starting(启动中), Connecting(连接中),Receiving(接收中),Stopped(已停止)。当你处于刚入门的学习者时,可能觉得这样一切安好,但是,当项目的业务流程增加了的情况怎么办。

例如,现在老板定义了一个新的业务流程给你,你定义好的新枚举类型如下:enum workflow_2 { Starting, Dealing, Paused, Stopped};。此时 workflow_1 和 workflow_2 就会产生冲突,因为他们的常量表中 Starting、Stopped 是重复的。

enum workflow_1 
{ 
	Starting, 
	Connecting, 
	Receiving, 
	Stopped
};

enum workflow_2 
{ 
	Starting,  // 错误:Starting 重复定义
	Dealing, 
	Paused, 
	Stopped  // 错误:Stopped  重复定义
};

2. 传统的解决方式

  1. 解决方法一:借助于语言本身的特性
    C++ 11 推出了强枚举类型 enum class,借助于此,我们可以将上述的业务流程定义为
enum class workflow_1 
{ 
   Starting, 
   Connecting, 
   Receiving, 
   Stopped
};

enum class workflow_2 
{ 
   Starting,  // OK
   Dealing, 
   Paused, 
   Stopped  // OK
};

使用时则必须加上枚举的名字

workflow_1 w1 = workflow_1::Starting;
workflow_2 w2 = workflow_2::Starting;
  1. 解决方法二:借助于名字空间(命名空间)
    第二种方法,我们可以为每一个枚举定义一个名字空间,将枚举放到名字空间中去,并将枚举的类型名统一定为 type,以保证统一性。
namespace workflow_1 
{
    enum type
   { 
   	Starting, 
   	Connecting, 
   	Receiving, 
   	Stop
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值