std::to_underlying
De cppreference.com
Definido en el archivo de encabezado <utility> | ||
template<class Enum > constexprstd::underlying_type_t<Enum> to_underlying( Enum e )noexcept; | (desde C++23) | |
Convierte una enumeración a su tipo subyacente. Es equivalente a returnstatic_cast<std::underlying_type_t<Enum>>(e);.
Contenido |
[editar]Parámetros
e | - | Valor de enumeración a convertir. |
[editar]Valor de retorno
El valor entero del tipo subyacente de Enum
, convertido de e
.
[editar]Notas
std::to_underlying
puede usarse para evitar convertir una enumeración a un tipo entero distinto de su tipo subyacente.
[editar]Ejemplo
Ejecuta este código
#include <cstdint>#include <iomanip>#include <iostream>#include <type_traits>#include <utility> int main(){enumclass E1 :char{ e }; static_assert(std::is_same_v<char, decltype(std::to_underlying(E1::e))>);enumstruct E2 :long{ e }; static_assert(std::is_same_v<long, decltype(std::to_underlying(E2::e))>);enum E3 :unsigned{ e }; static_assert(std::is_same_v<unsigned, decltype(std::to_underlying(e))>); enumclass MascaraDeColor :std::uint32_t{ rojo =0xFF, verde =(rojo <<8), azul =(verde <<8), alfa =(azul <<8)};std::cout<<std::hex<<std::uppercase<<std::setfill('0')<<std::setw(8)<< std::to_underlying(MascaraDeColor::rojo)<<'\n'<<std::setw(8)<< std::to_underlying(MascaraDeColor::verde)<<'\n'<<std::setw(8)<< std::to_underlying(MascaraDeColor::azul)<<'\n'<<std::setw(8)<< std::to_underlying(MascaraDeColor::alfa)<<'\n'; // std::underlying_type_t<MascaraDeColor> x = MascaraDeColor::alfa; // ERROR: no hay conversión[[maybe_unused]]std::underlying_type_t<MascaraDeColor> y = std::to_underlying(MascaraDeColor::alfa);// de acuerdo}
Salida:
000000FF 0000FF00 00FF0000 FF000000
[editar]Véase también
(C++11) | Obtiene el tipo subyacente entero para un tipo enumeración dado (plantilla de clase) |
(C++11) | Comprueba si un tipo es un tipo enumeración (plantilla de clase) |
(C++23) | Comprueba si un tipo es un tipo enumeración con ámbito (plantilla de clase) |