2015-04-18 13 views
5

ho notato che se faccio qualcosa di simile in C++ utilizzando Microsoft Visual Studio Express 2013:Bel modo di dichiarare enumerazioni in C++, senza gonfiore del namespace

namespace LogLevelEnum { 
enum Type { 
    ALL, 
    FINEST, 
    FINE, 
    INFO, 
    WARNING, 
    SEVERE, 
    OFF 
}; 
} 
typedef LogLevelEnum::Type LogLevel; 

posso accedere al enum elementi utilizzando le cose come LogLevel::INFO e LogLevel::WARNING, ma non facendo semplicemente INFO o WARNING. Mi piace così perché non inserisce tanti simboli nello spazio dei nomi che lo circonda.

Tuttavia, mi chiedevo se questo è un comportamento standard. So che le classi e spazi dei nomi possono essere indicizzati utilizzando l'operatore ::, ma fa un po 'meno senso per quella di lavorare anche su enumerazioni, considerando semplicemente scaricano tutto nello spazio dei nomi è in.

+1

Basta usare un [scope enum] (http://en.cppreference.com/w/cpp/language/enum). – chris

+0

C++ 11 classi di enumerazione? –

+0

@chris: Ah, non sapevo di questi. Credo che userò questi. Mi chiedo ancora come sia definito esattamente il comportamento di ciò che stavo usando. – RPFeltz

risposta

4

Tuttavia, mi chiedevo indipendentemente dal fatto che si tratti di un comportamento standard.

Sì, a condizione che si stia utilizzando un compilatore conforme a C++ 11 e per standard si fa riferimento allo standard C++ 11.

ma non facendo semplicemente INFO o AVVISO.

Questo perché l'enumerazione è all'interno dello spazio dei nomi. Hai provato LogLevelEnum ::INFO o LogLevelEnum ::WARNING?

Bel modo di dichiarare le enumerazioni in C++, senza gonfiore del namespace

Usa Scoped enumerations cioè enum struct | class invece di enum durante la definizione del enum.

+0

Per quanto riguarda * "Ciò è dovuto al fatto che l'enumerazione è all'interno dello scope del namespace. Avete provato LogLevelEnum :: INFO o LogLevelEnum :: WARNING?" *, Questo era il mio intento. Nota come ho detto * "Mi piace in questo modo perché non inserisce tanti simboli nello spazio dei nomi che lo circonda." * Poiché la tua risposta è essenzialmente un riassunto dei commenti e i commenti hanno risposto alla mia domanda, accetterò. – RPFeltz