2010-10-13 14 views
5

ho una classe che include un enum:Export parte dello spazio dei nomi di una classe

class appearance{ 
    // ... stuff ... 
    enum color {BLUE, RED, GREEN}; 
}; 

Vorrei collegare una parte dello spazio dei nomi (con using) in modo che posso fare riferimento al valore della BLUE semplicemente come BLUE, anziché appearance::BLUE. Allo stesso tempo, vorrei mantenere lo enum all'interno dello class{}, poiché ritengo che sia più naturale. Ho provato varie combinazioni di namespace e using, ma senza alcun risultato.

Qualche suggerimento ???

+0

ho avuto un problema simile: per abbreviare il nome ad un enum. 'long :: path :: to :: enum' dove' to' era la classe contenente l'enum. Poiché non potevo inoltrare a uno spazio dei nomi con etichetta breve personalizzato, decisi di sottoclasse dalla classe 'a':' classe Mine: public To {public: using long :: path :: to; private: Mine() {}; }; 'Come puoi vedere, proibisco di generare istanze di questa classe da un costruttore privato, quindi ora potrei usarlo in un modo molto più breve' Mine :: enum'. Senza conversione del tipo, ecc. – math

risposta

3

Non penso che si possa fare. AFAIK, è possibile utilizzare using appearance::color in un'altra classe o struttura come stabilito here.

A mediante dichiarazione in un classe A può nome uno dei seguenti modi:

  • Un membro di una classe di base di A

  • Un membro di un'unione anonima che è un membro di una classe base di A

  • Un enumeratore per un tipo di enumerazione appartenente a una classe base di A

1

Non penso che si possa fare questo con un enumerato di classe. Probabilmente l'unico modo per ottenere qualcosa di simile è quello di racchiudere l'enum nel proprio spazio dei nomi distinto e quindi utilizzarlo laddove necessario per essere nell'enumerazione.

MODIFICA: In questa domanda How do you import an enum into a different namespace in C++? mostro un modo possibile per importare un enum da uno spazio dei nomi in un altro, ma non credo che funzionerebbe (come-è comunque) per questo caso di classe.

1

Come Jacob ha detto che non è possibile farlo direttamente, ma è possibile farlo funzionare incapsulando l'enum all'interno del proprio spazio dei nomi.

namespace enums{ 
     enum color 
     {BLUE 
     ,RED 
     ,GREEN}; 
} // namespace enums 


using namespace enums; 
class Foo 
{ 
    int Bar(){return BLUE;} 
} 

una cosa del genere dovrebbe funzionare ...

+0

L'OP ha menzionato "Vorrei mantenere l'enum all'interno della classe {}". – casablanca

Problemi correlati