#defineで定義するときと違うのは、型とスコープがあるということなのですが、
ずっと思っていたことがあります。
なんで定数のスコープが外にあるの…
つまりは、
enum EnumTest
{
ENUMTEST_ONE = 1,
ENUMTEST_TWO,
ENUMTEST_THREE,
};
EnumTest test = ::ENUMTEST_ONE;
名前空間も汚れるし(グローバルな空間に放り投げられる)、
定数名にいちいち列挙型名をつけておかないとグローバルな空間で被るかもしれない。
しかも「EnumTest test = EnumTest::ENUMTEST_ONE;」みたいな書き方が出来ない。
まぁ結局定数がグローバルな空間にあるから、EnumTestの中にはそんな識別子ありませんよ、ってことなのでしょうけど。
なぜenumもちゃんとstructの仲間に入れてあげなかったのか。
理想としては、 こう書きたいんです。
こっちのほうが理に適っています。
名前空間も汚れません。
本当になんでこんな仕様になってしまったのか…
詳しいところをご存知の方はご教示ください。
ということで打開策なのですが、
C++ならば素直にstructでスコープを作る でも型がつけられない。
ので、中の無名enumをenum enum_tみたいにすれば、 こう書けて丁度良いかも?
前方宣言はできませんが。
C++0xを使えということでしょうか…