sólo tenía misma edición. tengo que inicializar un objeto a partir de lo que he leído en un archivo xml y, de seguro, no tengo control sobre lo que podría suceder con ese archivo.
constructor tiene una enumeración como argumento:
enum status_t { NOT_STARTED, STARTED, DONE };
MyObject::MyObject(int id, status_t status) : m_id(id), m_status(status){}
Así que cuando análisis del XML tengo que echarlo. Preferí manejar el reparto en el constructor para que las otras clases no tengan que saber cuáles son las enumeraciones válidas.
MyObject::MyObject(int id, int status) : m_id(id){
m_status = status_t(status);
}
Pero no hay manera de estar seguro de que el valor proveniente de xml estará en el rango correcto.
Aquí está la solución Vine con:
MyObject::MyObject(int id, int status) : m_id(id){
switch(status){
case NOT_STARTED:
case STARTED:
case DONE:
m_status=status_t(status);
break;
default:
m_status=NOT_STARTED;
break;
}
}
Esta es una opción de implementación, para forzar un valor por defecto en el caso de los datos no consistentes. Uno podría preferir tirar una excepción, en mi caso lo hará de esta manera.
Posible duplicado: [Transmitir int a Enum en C#] (http: // stackoverflow.com/questions/29482/cast-int-to-enum-in-c-sharp) – danihp