2013-03-16 12 views
5

mio uso di classe enum (VS2012):importazione statica in C++ 11 (ad esempio, una classe enum)

class matrix { 
public: 
    enum class operation_type {ADD, MULT}; 
    matrix(operation_type op); 
... 
} 

e in un altro frammento io uso

matrix* m = new matrix(matrix::operation_type::ADD); 

Se i nomi sono lunghi questo diventa molto confuso

E 'possibile importare in qualche modo i valori enum modo che io possa scrivere:

matrix* m = new matrix(ADD); 

Gli stessi saluti classi nidificate - li posso importare?

risposta

4

No, non è possibile.

Non si può omettere la parte operation_type, perché avete fatto di questo un scope enumerazione (ed è quello con ambito enumerazione sono tutti circa). Se vuoi evitarlo, devi renderlo senza spazio enum (rimuovendo la parola chiave class).

Inoltre, al di fuori di matrix non è possibile importare un nome membro tramite una dichiarazione using come se lo matrix fosse uno spazio dei nomi. Inoltre, secondo Paragrafo 7.3.3/7 della norma C++ 11:

Una dichiarazione di utilizzo non deve indicare un enumeratore con ambito.

+0

vuoi dire se ho 'classe A {pubblico: classe B {}}' quindi non posso scrivere 'utilizzando A :: B', giusto? –

+0

@JoshuaMN: Credo che puoi farlo solo se lo scrivi in ​​una sottoclasse di 'A'. –