std::to_underlying
De cppreference.com
<tbody>
</tbody>
| 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);.
Parámetros
| e | - | Valor de enumeración a convertir. |
Valor de retorno
El valor entero del tipo subyacente de Enum, convertido de e.
Notas
std::to_underlying puede usarse para evitar convertir una enumeración a un tipo entero distinto de su tipo subyacente.
Ejemplo
Ejecuta este código
#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
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) |