2011-12-01 16 views
5

私のプロジェクトでは、そのクラス全体で使用されているクラスでenumが定義されています。リファクタリング中、その列挙型は別のクラスに移動されました。だから私は単にtypedefこのように、私の元のクラスでそれを編:他のクラスからのenum値へのアクセス

class A { 
public: 
    enum E {e1, e2}; 
}; 
class B { 
public: 
    typedef A::E E; 
}; 

今変数定義、戻り値、関数のparamsなどは完璧に動作します。 2番目のクラスの列挙型の値にアクセスする必要がある場合のみ、サセリグクラスの名前である
などで修飾する必要があります。 E e = A::e1;

これを回避する方法はありますか、それを列挙型の値が出現するたびにコピーする必要がありますか?

答えて

2

あなたは、あなた自身のクラス内のtypedefができ、ネストされたクラスにそれぞれ列挙を置く:

class A { 
public: 
    struct E { enum EnumType { e1, e2 } }; 
}; 
class B { 
public: 
    typedef A::E E; 
}; 

は、その後、それだけでE::EnumType代わりEのだが、あなたは自動輸入の完全取得します。

+1

そして、どのようにenum値にアクセスしますか?私はまだ 'E :: EnumType e = E :: e1;'と書かなければなりません。 –

+0

あなたはそれを書かなければなりません。列挙の意味のある名前。 –

0

上記のC++ 11を使用していない方は、enumクラスをご覧ください。

関連する問題