2013-10-09 7 views
5

Vorrei iniziare a utilizzare le enumerazioni in alcuni punti del mio codice, ma ho un problema con le dichiarazioni precedenti del compilatore. Il modo in cui le enumerazioni sono attualmente dichiarate ha più senso per me:Migliore alternativa per enfatiche con scope - Pre C++ 11

Qual è il modo migliore per evitare una situazione come questa?

enum score_methods_t {NONE,ABS_FROM_PERFECT,ERROR_SQUARED}; 
enum scale_methods_t {NONE,CASES_MULTIPLIER,RANGE_MULTIPLIER}; 

Devo solo rendere tutto unico, o scope con namespace? Mi piacerebbe usare i tipi enum all'interno di una classe e NONE è il nome più descrittivo!

Anche il motivo per cui l'enumerazione è perché essenzialmente sono solo #define sotto il cofano ??

risposta

10

in pre-C++ 11 volte, ho usato:

struct score_methods { enum type { NONE, ABS_FROM_PERFECT, ERROR_SQUARED }; }; 

che significa che hai sempre score_methods::type per il tipo effettivo enum e score_methods::NONE, ecc. f o i valori.

Inoltre, no, non sono solo #define s come è possibile inserirli in diversi spazi dei nomi o classi (come visto sopra) e questo è qualcosa che il preprocessore non può fare/gestire.

+0

Utilizzando questo approccio, come si dichiarano le variabili, i membri della classe, gli argomenti delle funzioni del tipo enum? – ulidtko

+0

@ulidtko Usando ':: type', come in' score_methods :: type'. Questo è il prezzo che paghi in pre-C++ 11. :) –

+0

Sì ... È possibile dichiarare un membro 'score_methods :: value', dello stesso tipo di enum, e fare qualche uso dell'operatore di assegnazione struct implicito? Sembra molto più sicuro per me. – ulidtko

4

si può sempre mettere le enumerazioni in una classe:

struct Score 
{ 
    enum Method { None, AbsFromPerfect, ErrorSquared }; 
}; 

Usage:

void foo(Score::Method m); 

foo(Score::None); 
+0

Questo non è come un typesable come 'enum class', giusto? Cioè digitare errori come 'foo (15)' digitava e compilava correttamente. – ulidtko

+0

@ulidtko: No, [che non si compila] (http://ideone.com/6wWorj) a causa delle solite regole di conversione per enumerazioni. –