Espacios de nombres
Variantes
Acciones

std::to_underlying

De cppreference.com
< cpp‎ | utility
 
 
Biblioteca de servicios
Servicios generales
Operadores relacionales (en desuso en C++20)
Funciones de comparación de enteros
(C++20)(C++20)(C++20)  
(C++20)
Intercambio y operaciones de tipos
(C++14)
(C++11)
to_underlying
(C++23)
(C++11)
(C++11)
(C++17)
Tipos vocabulario comunes
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
Definido en el archivo de encabezado <utility>
template< class Enum >
constexpr std::underlying_type_t<Enum> to_underlying( Enum e ) noexcept;
(desde C++23)

Convierte una enumeración a su tipo subyacente. Es equivalente a return static_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

#include <cstdint>
#include <iomanip>
#include <iostream>
#include <type_traits>
#include <utility>
 
int main()
{
    enum class E1 : char { e };
    static_assert(std::is_same_v<char, decltype(std::to_underlying(E1::e))>);
    enum struct 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))>);
 
    enum class 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

Obtiene el tipo subyacente entero para un tipo enumeración dado
(plantilla de clase) [editar]
(C++11)
Comprueba si un tipo es un tipo enumeración
(plantilla de clase) [editar]
Comprueba si un tipo es un tipo enumeración con ámbito
(plantilla de clase) [editar]