誰かがC++のクラスで定義された列挙型にアクセスするためのセマンティクスに光を当てることができますか?
特に、列挙型メンバーが列挙型自体ではなくクラスの名前でアクセスされるのはなぜですか?がコンテナ/スコープであるとするとenum
、同じように、コンテナの要素にアクセスするのは、それがであるときとそうでないときで異なる扱いを受けるのはなぜですか?namespace
class
enum
class
与えられた
namespace mynamespace
{
class myclass
{
public:
enum myenum
{
enum1,
enum2
};
int myint;
};
}
完全修飾名がenum1
mynamespace::myclass::enum1
ではないのはなぜmynamespace::myclass::myenum::enum1
ですか?
後者は「機能」しますが、それを呼び出す「推奨」方法ではなく、一部のコンパイラはそこで警告をスローします。私見、それは正しいだけでなく、それにアクセスする唯一の方法でもあるはずです。
これは非常に奇妙なアクセスルールになりenum1
、別の列挙型に新しいものを追加すると非常に奇妙になります(その時点で修飾子を追加する必要があります)。
本当に、それは列挙型の目的を打ち負かします。列挙型のメンバーは、実際には列挙型のメンバーよりもクラスのメンバーであり、他の言語(C#など)での動作の方がはるかに好ましいと私は言わなければなりません。
これはCとの互換性を維持するためだと思いますが、アクセスセマンティクスで列挙型名を要求する方が良いオプションである理由がわかりません...クラス名をオプションにすることがCの互換性を維持するオプションになると思います。