加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2dx 3.0 过渡篇(二十八)C++11强类型枚举

发布时间:2020-12-14 18:55:23 所属栏目:百科 来源:网络整理
导读:一朋友在微信朋友圈晒了张照片,随手点开大图,带着赞赏的眼光扫了下,恩,几个月不见。又美丽了...咦?等等,她戴的这是什么? 酷炫的造型! 金属边框! 微型摄像头! 这不是传说中的谷歌眼镜么? 土豪啊, 还好我们已经是朋友了 ...我先给了她一个赞,然后
一朋友在微信朋友圈晒了张照片,随手点开大图,带着赞赏的眼光扫了下,恩,几个月不见。又美丽了...咦?等等,她戴的这是什么? 酷炫的造型!

金属边框!

微型摄像头!

这不是传说中的谷歌眼镜么?土豪啊,还好我们已经是朋友了...我先给了她一个赞,然后直奔主题,霸气回复道:我过几天去找你,你戴的是谷歌眼镜吧。哼哼小样。不想死的话...就让我...摸一下下能够么,我不奢求戴,摸一下就满足了...(哎。丢人啊)。



-------------------

在cocos2dx 3.0的文档里有这么一句话:
以 k 开头的常量和枚举量,通常被定义为 int 或者简单的 enum 类型,如今已经被强类型枚举(enum class)所替代,这样有利于避免ChongTu和类型错误。


新的格式是:
| v2.1 ? ? ? | v3.0 ? ? ? ?|
| kTypeValue | Type::VALUE |


写到这里。我头发一甩,笔锋一转...试问:什么是强类型枚举?回答这个问题还是要从枚举的分类说起。


C++11后,枚举有两种类型。一种是不限定作用域的枚举。另一种是限定作用枚举,也就是上面说的强类型枚举



1、不限定作用域枚举

创建该种枚举时名字是可选的,有例如以下两种方式:

//有命名的
enum color	
{
	red,};

//无命名的
enum 
{
	blue,}

首先。 这样的类型的枚举会自己主动依据需求将类型转换成整型;其次,由于没有强制性的名字限定的要求,easy造成枚举类型名字的冲突。比如:
enum color1
{
	red,green,blue,};

enum color2
{
	white,//这里的green与上面的会有冲突
	yellow,};

bool HelloWorld::init()
{
	int type_int = green;//编译时这里会报错

	return true;
}

编译报错的原因是由于编译器不知道你要的green究竟是color1的还是color2的。



2、强类型枚举。


定义强类型枚举需增加keywordenum class(或者等价地使用enum struct)
。例如以下:

enum class color
{
	red,}

使用强类型枚举时必须指明其所属范围,如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);//设置纵向居中
主要还是看TextHAlignment 与 TextVAlignment,它们就是强类型枚举。以下看下源代码:
enum class TextVAlignment
{
    TOP,CENTER,//
    BOTTOM,};

enum class TextHAlignment
{
    LEFT,//看这里
    RIGHT,};

从上面的代码就能够看出,强类型枚举中的成员都有各自的作用域。所以不用操心命名会有冲突。就像上面的这个CENTER,使用起来就是:TextHAlignment::CENTER 与 TextVAlignment::CENTER。

恩,临时就扯到这里。强类型枚举另一些其它功能大家能够自己去了解下。我就不多说了。



尊重原创,转载请注明来源:http://www.voidcn.com/article/p-hjcvtoej-bcy.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读