2010-02-10 9 views
6

creo que el nuevo C++ estándar permite un "alcance" extra para los tipos enumerados:Will `typedef enum {} t` permite identificar los identificadores de elemento enum en C++ 0x?

enum E { e1, e2 }; 

E var = E::e1; 

Como sé que un montón de archivos de origen que contienen el viejo typedef enum de estilo C, que se preguntaban si la nueva norma permitiría utilizando el typedef para estos tipos enumerados de otro modo anónimo:

typedef enum { d1, d2 } D; 
D var = D::d1; // error? 
+0

Supongo que 'D' definido con un typedef es para fines prácticos equivalente a un' enum D {} 'apropiado, por lo que las mismas reglas se aplican a ambos. Entonces no, eso no debería ser un error en C++ 0x. – Manuel

+1

+1 para finalmente llamarlo C++ 1x :) –

+1

Prefiero C++ 0x porque ese es el término que usa Stroustroup. – Manuel

Respuesta

5

el nuevo estándar añadirá un nuevo tipo de fuerte enumeración, pero la sintaxis será un poco diferente, y enumeraciones de estilo antiguo serán compatibles (código válido en C + +03 será un código válido de C++ 0x) por lo que no necesitará hacer nada para mantener el código heredado válido (no t el typedef, nada más).

enum class E { e1, e2 }; // new syntax, use E::e1 
enum E2 { e1, e2 }; // old syntax, use e1 or E2::e1 (extension) 

No es un C++ FAQ here que se ocupa de este tema en particular.

+1

Creo que OP sabe que typedef no es necesario, solo le preocupa el código C heredado que lo usa. – Manuel

+0

El código heredado usará las enumeraciones de estilo antiguo, y las enumeraciones (la del OP) colocarán los nombres en el ámbito adjunto. Estoy editando la respuesta para que quede más clara. –