"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Se pueden convertir automáticamente enumeraciones fuertemente tipadas a números enteros en C++?

¿Se pueden convertir automáticamente enumeraciones fuertemente tipadas a números enteros en C++?

Publicado el 2024-11-16
Navegar:701

Can Strongly Typed Enums Be Automatically Converted to Integers in C  ?

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.

Último tutorial Más>

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