Automatización de la conversión de enumeraciones fuertemente tipadas a enteros
En C, las enumeraciones vienen en dos tipos: enumeraciones fuertemente tipadas y enumeraciones regulares. Las enumeraciones regulares se pueden convertir implícitamente a números enteros, mientras que las enumeraciones fuertemente tipadas requieren una conversión explícita. Esto plantea la pregunta: ¿existe una forma automatizada de convertir enumeraciones fuertemente tipadas en números enteros sin recurrir a conversiones explícitas?
La respuesta es no y es intencional. Las enumeraciones fuertemente tipadas están diseñadas para evitar la conversión implícita a números enteros. Básicamente, el compilador garantiza que usted reconozca explícitamente la conversión de un valor enumerado a un número entero.
Sin embargo, existe una solución alternativa para evitar especificar el tipo subyacente en la conversión. Al utilizar una función de plantilla, podemos abstraer la especificación de tipo de la conversión.
template
constexpr typename std::underlying_type::type to_underlying(E e) noexcept {
return static_cast::type>(e);
}
Con esta función de plantilla, la conversión se puede lograr de la siguiente manera:
std::cout Este enfoque elimina la especificación de tipo explícita en la conversión, lo que simplifica el proceso de conversión y al mismo tiempo mantiene el comportamiento deseado de conversión explícita forzada para tipos fuertemente tipados. enumeraciones.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3