¿Hay alguna forma de sobrecargar a un operador de conversión para convertir entre dos enumeraciones?Operador de conversión de sobrecarga entre dos enumeraciones
En mi código que tengo
enum devStatus
{
NOT_OPERATING,
INITIALISING,
DEGRADED,
NORMAL
};
enum dataStatus
{
UNAVAILABLE = 1,
DEGRADED,
NORMAL
}
donde NOT_OPERATING y el mapa de INICIALIZACIÓN DISPONIBLE; Mapa DEGRADADO y NORMAL en línea recta. Estos se arreglan mediante interfaces externas.
Busco una manera de convertir entre devStatus
y dataStatus
y me gustaría ser capaz de escribir algo como:
devStatus devSts;
getDeviceStatus(&devSts);
dataStatus dataSts = (dataStatus)devSts;
sé que si se trataba de clases, podría escribir devStatus::operator dataStatus()
para hacer esto. ¿Hay alguna forma de hacer esto para una enumeración?
tan sólo pudiera tener una función libre dataStatus devStatus2dataStatus(const devStatus& desSts)
¿Cuáles son las ventajas/disadvantes de la definición de una clase para cada enumeración en su lugar, y los operadores de conversión? En el lado negativo, más código repetitivo. Por el lado positivo, ninguna función de conversión flota en el espacio de nombres externo, aunque ya ha dicho que las enumeraciones ya flotan por allí. La eficiencia debe ser idéntica a la optimización del compilador. –
Acepto que el ámbito de nombres para las enums de C++ no es ideal, pero se puede evitar fácilmente envolviendo la declaración enum y la función de conversión con un espacio de nombres, sin tener que pasar por el agujero de la creación de una clase para cada enumeración. Continuar por ese camino trae a colación cuestiones lógicas como la relación is-a/has-a y qué operadores deben/deben proporcionarse para ese tipo. Creo que hacerlo es probablemente excesivo para la mayoría de las enumeraciones. –
Actualicé la respuesta con un ejemplo de declaración de espacio de nombres y uso de muestra. –