将作用域枚举转换为基础类型

Convert scoped enum to underlying type

本文关键字:为基础 类型 转换 枚举 作用域      更新时间:2023-10-16

给定一个作用域枚举,是否可以在不显式指定基础类型的情况下转换为基础类型?

例:

enum class HeapCorruptionDetectMethod {//default is int
write_on_freed,
buffer_underrun,
buffer_overrun
};
auto active_method = HeapCorruptionDetectMethod::write_on_freed;
//...
//agnostic about the underlying type:
auto index = static_cast<*underlying_type*>(active_method);

换句话说,是否可以查询基础类型?

您可以尝试以下模板功能,我觉得它非常方便且富有表现力:

template <typename Enum>
constexpr typename std::enable_if<std::is_enum<Enum>::value, typename std::underlying_type<Enum>::type>::type
get_underlying(Enum const& value) {
return static_cast<typename std::underlying_type<Enum>::type>(value);
}

然后你可以像这样使用它:

enum class Foo : int {
A = 0,
B = 1
};
int main() {
std::cout << get_underlying(Foo::A) << std::endl; // 0
std::cout << get_underlying(Foo::B) << std::endl; // 1
return 0;
}

现场查看