「Foo」クラス(下記)で定義された列挙値のセットがあります。
namespace Fii
{
class Foo
{
struct Bar
{
enum Baz
{
BAZ1,
BAZ2,
BAZ3
};
};
};
};
構造体を使用して、Baz列挙値の範囲を縮小し、関連する値のグループがあることを示しています。
私の目的は、列挙型から変数に値を割り当てることです。上記のクラス定義を使用して、これを行うことができます。
Fii::Foo::Bar::Baz myValue = Fii::Foo::Bar::BAZ1 (Works in both C++98 and C++11)
しかし、私はそれを感じます:
- 一見すると、myValueはFii :: Foo :: Barとして初期化されているように見えますが、これは、列挙型が親(この場合はBar )の関連する定数をグループ化するためのハックであるためです。
準備を改善するために、IIはコードを次のようにリファクタリングしました。
namespace Fii
{
class Foo
{
enum Baz
{
BAZ1,
BAZ2,
BAZ3
};
};
};
この新しいクラス定義を使用して、これを行うことができます。
Fii::Foo::Baz myValue = Fii::Foo::Baz::BAZ1 (Works in C++11 only)
Fii::Foo::Baz myValue = Fii::Foo::BAZ1 (Should work on C++98 and C++11 - not tested)
Q1)Fii :: Foo :: Bar :: Baz myValue = Fii :: Foo :: Baz::BAZ1がC++11でのみ機能するのはなぜですか?
Q2)C ++ 98では、Fii :: Foo :: Baz myValue = Fii :: Foo :: Baz :: BAZ1と書く方法はありますか?クラス定義で好きな変更を加えることができます。
環境:-C++11をサポートするClangコンパイラ-Xcode4-MacOS OS 10.8