2009-11-12 4 views
3

Supposons que vous ayez une classe avec un ENUM défini en son sein:C++: Equivalent à "using namespace <namespace>" mais pour les classes?

class MyClass { 
    typedef enum _MyEnum{ a } MyEnum; 
} 

est-il un moyen d'accéder à la valeur d'une d'une autre classe sans avoir à se référer à lui comme MyClass :: a? Si l'énumération était contenue dans un espace de noms plutôt que dans une classe, «utiliser un espace de noms»; résout le problème - existe-t-il une manière équivalente de faire cela avec les classes?

+4

Souligné suivi d'un palier supérieur case letter sont des noms réservés au compilateur. – GManNickG

+0

comme vous l'avez déclaré "MyEnum" sera privé de sorte que vous ne serez pas en mesure d'y accéder du tout –

Répondre

4

Je suis sûr que vous êtes bloqué avec "MyClass :: a". Aussi ... ne ferait-il pas ce genre de défaire le but de mettre l'enum dans une classe en premier lieu?

+0

Dépendez où l'utilisation est utilisée. Il peut être utilisé localement, ex dans une fonction: void func() {using MyClass :: a;}. Cela ne le rendrait pas accessible en se référant à «a» en dehors de la fonction. Donc non, je ne pense pas que cela irait à l'encontre du but. – n1ckp

3

Le mieux que vous pouvez faire est de tirer des symboles individuels dans la classe.

class SomeClass { 
    typedef MyClass::MyEnum MyEnum; 
    MyEnum value; 
}; 

Notez que si le typedef est dans une section publique de la classe alors tout le monde peut se rapporter à SomeClass::MyEnum comme synonyme de MyClass::MyEnum.

0

Sauf si une autre classe est une classe dérivée de MyClass (et votre enum est protégée/public), non. Je sais que ce n'est pas une réponse mais à mon avis l'enum est défini dans MyClass pour une raison, alors n'essayez pas de le rendre globalement disponible.

1

Une alternative serait de dériver publiquement à partir d'un support Enum- -class:

struct Holder { 
    enum MyEnum { a }; 
}; 

class User : public Holder { 
public: 
    // a now visible in class 
    MyEnum f() { return a; } 
}; 

// a visible outside too 
User::MyEnum f() { return User::a; } 
0

Vous pouvez tirer dans chacun individuellement constante comme suit:

class MyClass { 
    public: 
    // I added a value here intentionally to show you what to do with more than one enum value 
    typedef enum _MyEnum{ a, b } MyEnum; 
} 
using MyClass::a; 
using MyClass::b; 
//... likewise for other values of the enum 
Questions connexes