2010-08-06

enumのまとめ

C++0xでは、enumがだいぶ変更されている。

unscoped enumは、従来のenumだ。ただし、enum-baseが追加されている。enum-baseが指定されていない場合、内部型は実装依存である。他には、名前があるかどうかで区別する必要もある。

scoped enumは、強い型付けがされたenumだ。scoped enumには、必ず名前が必要である。enum-baseが指定されていない場合、デフォルトでintになる。

opaque-enum-declarationは、enumを定義せずに宣言するための機能だ。これには、unscoped enumの場合、enum-baseが指定されていなければならない。scoped enumの場合は、デフォルトでintなので、指定されていなくても構わない。

これを考えると、unscoped enumの名前の有無とenum-baseの有無。scoped enum。opaque-enum-declaration。合計、6種類のenumがあることになる。

enumの解説は、この種類ごとに、分けて解説していく形にしよう。

ただし、unscoped enumは、四種類もあるのが、どうにかならないものか。

ところで、私は列挙型という名称を使いたくない。enumにしようかとおもっている。

個人的には、unscoped enumを使うべきではないと思っている。しかし、整数型への暗黙の型変換が欲しい場合もあるかもしれない。単なるマジックナンバーに名前をつけたい場合があるからだ。なかなかうまくいかないものだ。もっとも、そういう場合は、名前空間スコープ内のconstな変数を使うべきだと思うのだが。

No comments: