Cocos2dx 3.0 過渡篇(二十八)C++11強型別列舉
阿新 • • 發佈:2018-12-03
一朋友在微信朋友圈晒了張照片,隨手點開大圖,帶著讚賞的眼光掃了下,恩,幾個月不見。又美麗了...咦?等等,她戴的這是什麼?
酷炫的造型!
以 k 開頭的常量和列舉量,通常被定義為 int 或者簡單的 enum 型別,如今已經被強型別列舉(enum class)所替代,這樣有利於避免ChongTu和型別錯誤。
寫到這裡。我頭髮一甩,筆鋒一轉...試問:什麼是強型別列舉?回答這個問題還是要從列舉的分類說起。
首先。 這樣的型別的列舉會自己主動依據需求將型別轉換成整型;其次,由於沒有強制性的名字限定的要求,easy造成列舉型別名字的衝突。比如:
編譯報錯的原因是由於編譯器不知道你要的green究竟是color1的還是color2的。
使用強型別列舉時必須指明其所屬範圍,如color::red,而不能直接使用red。(這裡需說明一下, 不限定型別列舉也能夠指定其範圍,如上面的color1::red,但它不是強制要求的。也就是能夠直接使用red。這與強型別列舉有同父異母的差別。別混淆)。
以下舉個cocos2dx中的樣例來看下強型別列舉是怎麼回事。
從上面的程式碼就能夠看出,強型別列舉中的成員都有各自的作用域。所以不用操心命名會有衝突。就像上面的這個CENTER,使用起來就是:TextHAlignment::CENTER 與 TextVAlignment::CENTER。
恩,臨時就扯到這裡。強型別列舉另一些其它功能大家能夠自己去了解下。我就不多說了。
金屬邊框!
微型攝像頭!
這不是傳說中的谷歌眼鏡麼?土豪啊,還好我們已經是朋友了...我先給了她一個贊,然後直奔主題,霸氣回覆道:我過幾天去找你,你戴的是谷歌眼鏡吧。哼哼小樣。不想死的話...就讓我...摸一下下能夠麼,我不奢求戴,摸一下就滿足了...(哎。丟人啊)。
-------------------
在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,//這裡的green與上面的會有衝突 yellow, }; bool HelloWorld::init() { int type_int = green;//編譯時這裡會報錯 return true; }
編譯報錯的原因是由於編譯器不知道你要的green究竟是color1的還是color2的。
2、強型別列舉。
定義強型別列舉需增加keywordenum class(或者等價地使用enum struct)。例如以下:
enum class color
{
red,
green,
}
使用強型別列舉時必須指明其所屬範圍,如color::red,而不能直接使用red。(這裡需說明一下, 不限定型別列舉也能夠指定其範圍,如上面的color1::red,但它不是強制要求的。也就是能夠直接使用red。這與強型別列舉有同父異母的差別。別混淆)。
以下舉個cocos2dx中的樣例來看下強型別列舉是怎麼回事。
主要還是看TextHAlignment 與 TextVAlignment,它們就是強型別列舉。以下看下原始碼://首先建立一個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。
恩,臨時就扯到這裡。強型別列舉另一些其它功能大家能夠自己去了解下。我就不多說了。
尊重原創,轉載請註明來源:http://blog.csdn.net/star530/article/details/24273309