2011-12-01 15 views
5

W moim projekcie mam wyliczenie zdefiniowane w klasie, które jest używane w tej klasie. Podczas refaktoryzacji to wyliczenie zostało przeniesione do innej klasy. Więc po prostu typedef ed go w mojej oryginalnej klasy, podobnie jak to:Uzyskiwanie dostępu do wartości wyliczeniowych z innej klasy

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

Teraz zmienne definicje, zwracane wartości, params funkcyjne itp działa doskonale. Tylko wtedy, gdy chcę uzyskać dostęp do wartości enum w mojej drugiej klasie, nadal muszę zakwalifikować je za pomocą nazwy klasy surroundig,
np. E e = A::e1;

Czy istnieje sposób, aby tego uniknąć, czy też muszę go skopiować na każde wystąpienie wartości wyliczeniowych?

Odpowiedz

2

umieścić każde wyliczenie w zagnieżdżonej klasy, które można typedef we własnej klasie:

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

Wtedy to właśnie E::EnumType zamiast E ale masz pełną automatycznego importu.

+1

Jak uzyskać dostęp do wartości wyliczonych? Nadal muszę napisać 'E :: EnumType e = E :: e1;' –

+0

Musisz napisać to, co moim zdaniem jest niewielką ceną za brak konieczności duplikowania wyliczonych wartości, o ile tworzysz E a znacząca nazwa dla wyliczenia. –

0

Jeśli nie używasz C++ 11, możesz zajrzeć do klas wyliczeniowych.

Powiązane problemy