将作用域枚举转换为基础类型
Convert scoped enum to underlying type
给定一个作用域枚举,是否可以在不显式指定基础类型的情况下转换为基础类型?
例:
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;
}
现场查看
相关文章:
- 强制转换为引用类型
- 在c++中为double类型的数组创建一个unique_ptr
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 在 C++ 中将对象转换为派生类型
- 将作用域枚举转换为基础类型
- 为什么static_cast基础类型的枚举类int8_t获得意外值?
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 将空*参数转换为各种类型的参数是UB吗?
- 查找声明为结构类型 C++ 的数组末尾
- 枚举类的 C 样式强制转换到基础类型 char 的引用
- 在编译时将强类型枚举器转换为其基础类型?
- 将指向类型化/大小的枚举的指针转换为指向基础类型的指针是否安全?
- 枚举类的基础类型别名为整型类型(编译错误)
- 在CMAKE中,如何以每个用户为基础更改构建类型的默认编译器标志
- 运算符<< 是模棱两可的打印枚举值,基础类型为 short
- 如何将Boost数量数组类型双关为基础类型
- 为什么不能通过指针将 C++11 强类型枚举强制转换为基础类型?
- 将基础类型的任意值强制转换为强类型枚举类型是否安全?
- 是否可以将枚举类转换为基础类型