当使用 enum class 时,它具有更强的类型安全性和隔离性,因此需要显式转换才能访问其底层整数值。
std::underlying_type_t 是一个类型别名,它返回枚举类型的底层类型。
to_underlying 函数提供了一种方便的方式来执行这种转换,特别是在需要频繁进行此类转换的情况下。
#include <type_traits>
#include <utility>
#include <cstdint>
#include <iostream>template <class T, std::enable_if_t<std::is_enum_v<T>, int> = 0>
constexpr std::underlying_type_t<T> to_underlying(T t) noexcept {return static_cast<std::underlying_type_t<T>>(t);
}template <class T, std::enable_if_t<!std::is_enum_v<T>, int> = 0>
constexpr T to_underlying(T t) noexcept {return t;
}void test() {enum class E : std::uint8_t { A = 0, B, C }; int x = to_underlying(E::B);int x1 = to_underlying(E::A);std::cout << x << "," << x1 << std::endl;
}
输出: 1,0