c++ - 将作用域枚举转换为基础类型
问题描述
给定一个范围枚举,是否可以在不显式指定基础类型的情况下转换为基础类型?
例子:
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;
}
现场查看
推荐阅读
- java - 在 servlet 中解析 Json
- c# - ASP.NET Core 服务不会重定向 http:localhost:
到 https 架构 - reactjs - REACT:将项目推送到状态内的数组
- image - TWIG 不应用图像样式,但计算它
- mongodb - 使用 MongoDB 进行模糊搜索,为什么 /1.0/ 匹配 100.0?
- azure - 是否可以将“V2”存储帐户降级为“V1”?
- linux - 多线程应用程序中的 BPF 过滤器
- c++ - 变量在常量表达式中可用的条件
- javascript - PayPal 智能支付按钮中的自定义文件
- java - 运行 sbt 并获取“未解决的依赖项:收到致命警报:access_denied”