2011-12-01 102 views
5

在我的項目中,我有一個在類中定義的枚舉,用於整個類。在重構期間,該枚舉被移至另一個類。所以我只是typedef編在我原來的類,像這樣:從其他類訪問枚舉值

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

現在變量定義,返回值,函數參數,可以等完美地工作。只有當我想訪問我的第二個類中的枚舉值時,我仍然必須使用surroundig類的名稱
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

你將如何訪問枚舉值?我仍然必須編寫'E :: EnumType e = E :: e1;' –

+0

您必須編寫它,我覺得這是一個小的代價,不需要重複枚舉值,只要您使E a有意義的枚舉名稱。 –

0

如果你不在上面使用C++ 11,你可以看看enum類。