Cocos2dx 3.0 过渡篇(二十八)C++11强类型枚举
来源:互联网 发布:网页unity3d游戏存档 编辑:程序博客网 时间:2024/06/05 18:30
在cocos2dx 3.0的文档里有这么一句话:
以 k 开头的常量和枚举量,通常被定义为 int 或者简单的 enum 类型,现在已经被强类型枚举(enum class)所替代,这样有利于避免ChongTu和类型错误。
新的格式是:
| v2.1 | v3.0 |
| kTypeValue | Type::VALUE |
写到这里,我头发一甩,笔锋一转...试问:什么是强类型枚举?回答这个问题还是要从枚举的分类说起。
C++11后,枚举有两种类型,一种是不限定作用域的枚举,另一种是限定作用枚举,也就是上面说的强类型枚举。
1、不限定作用域枚举。创建该种枚举时名字是可选的,有如下两种方式:
首先,这种类型的枚举会自动根据需求将类型转换成整型;其次,由于没有强制性的名字限定的要求,容易造成枚举类型名字的冲突,例如:
编译报错的原因是因为编译器不知道你要的green到底是color1的还是color2的。
2、强类型枚举。
定义强类型枚举需加入关键字enum class(或者等价地使用enum struct)。如下:
使用强类型枚举时必须指明其所属范围,如color::red,而不能直接使用red。(这里需说明一下,不限定类型枚举也可以指定其范围,如上面的color1::red,但它不是强制要求的,也就是可以直接使用red,这与强类型枚举有同父异母的区别,别混淆)。
下面举个cocos2dx中的例子来看下强类型枚举是怎么回事。
主要还是看TextHAlignment 与 TextVAlignment,它们就是强类型枚举。下面看下源码:
从上面的代码就可以看出,强类型枚举中的成员都有各自的作用域,所以不用担心命名会有冲突,就像上面的这个CENTER,使用起来就是:TextHAlignment::CENTER 与 TextVAlignment::CENTER。
恩,暂时就扯到这里。强类型枚举还有一些其他功能大家可以自己去了解下。我就不多说了。
以 k 开头的常量和枚举量,通常被定义为 int 或者简单的 enum 类型,现在已经被强类型枚举(enum class)所替代,这样有利于避免ChongTu和类型错误。
新的格式是:
| v2.1 | v3.0 |
| kTypeValue | Type::VALUE |
写到这里,我头发一甩,笔锋一转...试问:什么是强类型枚举?回答这个问题还是要从枚举的分类说起。
C++11后,枚举有两种类型,一种是不限定作用域的枚举,另一种是限定作用枚举,也就是上面说的强类型枚举。
1、不限定作用域枚举。创建该种枚举时名字是可选的,有如下两种方式:
- //有命名的
- enum color
- {
- red,
- };
- //无命名的
- enum
- {
- blue,
- }
首先,这种类型的枚举会自动根据需求将类型转换成整型;其次,由于没有强制性的名字限定的要求,容易造成枚举类型名字的冲突,例如:
- enum color1
- {
- red,
- green,
- blue,
- };
- enum color2
- {
- white,
- green,//这里的green与上面的会有冲突
- yellow,
- };
- bool HelloWorld::init()
- {
- int type_int = green;//编译时这里会报错
- return true;
- }
编译报错的原因是因为编译器不知道你要的green到底是color1的还是color2的。
2、强类型枚举。
定义强类型枚举需加入关键字enum class(或者等价地使用enum struct)。如下:
- enum class color
- {
- red,
- green,
- }
使用强类型枚举时必须指明其所属范围,如color::red,而不能直接使用red。(这里需说明一下,不限定类型枚举也可以指定其范围,如上面的color1::red,但它不是强制要求的,也就是可以直接使用red,这与强类型枚举有同父异母的区别,别混淆)。
下面举个cocos2dx中的例子来看下强类型枚举是怎么回事。
- //首先创建一个label
- auto label_2 = LabelTTF::create("star","Arial",25);//create a label
- label_2->setHorizontalAlignment(TextHAlignment::CENTER);//设置横向居中
- label_2->setVerticalAlignment(TextVAlignment::CENTER);//设置纵向居中
- enum class TextVAlignment
- {
- TOP,
- CENTER,//
- BOTTOM,
- };
- enum class TextHAlignment
- {
- LEFT,
- CENTER,//看这里
- RIGHT,
- };
从上面的代码就可以看出,强类型枚举中的成员都有各自的作用域,所以不用担心命名会有冲突,就像上面的这个CENTER,使用起来就是:TextHAlignment::CENTER 与 TextVAlignment::CENTER。
恩,暂时就扯到这里。强类型枚举还有一些其他功能大家可以自己去了解下。我就不多说了。
0 0
- Cocos2dx 3.0 过渡篇(二十八)C++11强类型枚举
- Cocos2dx 3.0 过渡篇(二十八)C++11强类型枚举
- Cocos2dx 3.0 过渡篇 (二十) 闲扯强制类型转换
- Cocos2dx 3.0 过渡篇 (二十) 闲扯强制类型转换
- Cocos2dx 3.0 过渡篇 (二十) 闲扯强制类型转换
- Cocos2dx 3.0 过渡篇(十八) Cocos2d-x 3.0rc,又一种创建项目方式
- Cocos2dx 3.0 过渡篇(十八) Cocos2d-x 3.0rc,又一种创建项目方式 .
- Cocos2dx 3.0 过渡篇(十八) Cocos2d-x 3.0rc,又一种创建项目方式
- Cocos2dx 3.0 过渡篇(十八) Cocos2d-x 3.0rc,又一种创建项目方式
- Cocos2dx 3.0 过渡篇(二) 事件回调
- Cocos2dx 3.0 过渡篇(二) 事件回调
- Cocos2dx 3.0 过渡篇(二十九)globalZOrder()与localZOrder()
- Cocos2dx 3.0 过渡篇(二) 事件回调
- Cocos2dx 3.0 过渡篇(二) 事件回调
- Cocos2dx 3.0 过渡篇(二) 事件回调
- Cocos2dx 3.0 过渡篇(二十三) C++11一种新随机数获取方法
- Cocos2dx 3.0 过渡篇(二十六)C++11多线程std::thread的简单使用(上)
- Cocos2dx 3.0 过渡篇(二十七)C++11多线程std::thread的简单使用(下)
- sdddddddddddddddddddddd
- Cocos2dx 小技巧(十)三种缓存类介绍
- 重载内核全程分析笔记
- ZOJ 3765 Lights(SplayTree)
- 每天一个java类之Random
- Cocos2dx 3.0 过渡篇(二十八)C++11强类型枚举
- ubuntu下SVN配置多库,遇到重启Apache报错:Unkonwn DAV provider:svn
- IOS label设置多行显示并且文字在最上方显示
- 设置父控件的事件,需要去掉子控件的android:clickable="true" 属性。
- [转]对A盾原理的小小总结
- Android:theme
- 滚滚滚滚滚滚滚滚
- Leetcode:Reorder List 单链表重排序
- MySQL Cluster 7.3 安装(三)------初始化启动 MySQL Cluster 7.3