He estado tratando de leer un poco del estándar de C++ para descubrir cómo funciona enum. En realidad, hay más allí de lo que originalmente pensé.Tipo subyacente de una enumeración de C++ en C++ 0x
Para una enumeración con ámbito, está claro que el tipo subyacente es int
a menos que se especifique lo contrario con una cláusula enum-base (puede ser de tipo integral).
enum class color { red, green, blue}; // these are int
Para enumeraciones sin ámbito, parece que el tipo subyacente puede ser cualquier tipo integral que funciona y que no va a ser más grande que un int, a menos que tiene que ser.
enum color { red, green, blue}; // underlying type may vary
Dado que el tipo subyacente de enumarations sin ámbito no están estandarizados, ¿cuál es la mejor manera de hacer frente a serializar instancias de uno? Hasta ahora, he estado convirtiendo a int
al escribir y luego serializar en un int
y estableciendo mi variable enum
en un interruptor al leer, pero parece un poco torpe. ¿Hay una mejor manera?
enum color { red, green, blue };
color c = red;
// to serialize
archive << (int)c;
// to deserialize
int i;
archive >> i;
switch(i) {
case 0: c = red; break;
case 1: c = green; break;
case 2: c = blue; break;
}
clase de enumeración es solamente C++ 0x ... – Klaim
1, no sé por qué esta pregunta se -1ed ... –
Posiblemente porque el que pregunta aparentemente no puede diferenciar entre una ya existente y un documento de estándares propuestos? –