ゆき社長

シーゲンガーのお勉強 ゲームプログラマ、ゲーマー、色々!

ちょっと便利な enum class (scoped enum)

ちょっとしたコネタレベルだけど

C++11では enumのかわりに enum class あるいは enum struct

を使うと良いという話

地味に便利なんだよ。

例えば 今まで enumは、ネームスペースを持っていなかったので

他のシンボルと名前がかぶるので

namespaceを作ったり、プリフィックスつけたりして

シンボル名の衝突を避けていたのが

デフォルトで名前空間を持つので

シンボル名がかぶる事なく使える

他にも

enumの型サイズは実装依存だったので コンパイラによりサイズが変わる可能性があったが

enum classだと、int型であることが明記されました

その事により 定義でサイズがわかるので、前方宣言可能になります

デフォルトはintですが、整数型(char、short、int、long等)を継承する事で

他の型にする事も可能

また、安全に型変換をするために

std::underlying_type

で内部型にキャストできます

とりあえず C++11使うなら enumを全部 enum class に変更すべきです