2011-12-01 32 views
5

Projemde, bir sınıfta tanımlanan ve sınıf boyunca kullanılan bir numara var. Refactoring sırasında bu enum başka bir sınıfa taşındı. Yani basitçe typedef böyle, benim orijinal sınıfta ed:Diğer sınıftan enum değerlerine erişme

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

Şimdi değişken tanımlar, dönüş değerleri, fonksiyon parametreleri, vb mükemmel çalışır. Sadece enumun değerlerine ikinci sınıfımın içinden erişmek istediğimde, onları hala çevreleyen sınıfın adı olan
ile nitelendirmek zorundayım. E e = A::e1;

Bundan kaçınmanın bir yolu var mı, yoksa bunu enum değerlerinin her bir döngüsüne kopyalamak zorunda mıyım?

cevap

2

Sen kendi sınıfı içinde typedef bir iç içe sınıfa her numaralandırma koydu:

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

O zaman sadece E::EnumType yerine E ait ama tam otomatik ithalini olsun.

+1

Numara değerlerine nasıl erişirsiniz? Hala yazmak zorundayım. E :: EnumType e = E :: e1; ' –

+0

Bunu yazmak zorundasınız ki, E'yi yaptığınız sürece, sayılan değerleri çoğaltmak zorunda kalmamanız için küçük bir bedel olduğunu hissediyorum. sayım için anlamlı isim. –

0

Yukarıda C++ 11 kullanmıyorsanız, enum sınıflarına bakabilirsiniz.

İlgili konular