c++ - 从底层类型安全地转换枚举类
问题描述
假设我有一个像这样的强类型枚举类型:
enum class message : int {
JOIN = 0,
LEAVE = 4,
SPAWN = 1,
}
而且我需要安全地(在这种情况下安全地意味着丢弃无效的变体)将它从它的基础类型(int)转换。
为此,我有一个函数可以为我转换它:
std::optional<message> get_message(int num) {
return num == (int)message::JOIN || num == (int)message::LEAVE || num == (int)message::SPAWN ? (message)num : {};
}
这很有效,但是写起来很长并且容易出错,特别是对于具有大量变体的枚举。
有没有办法在 C++17 中自动化这个过程?
解决方案
谈到底层类型,我们注意到这个类只是使用另一种类型作为模型来获取一个类型,但它不会在这些类型之间转换值或对象。
作为简化功能的一个选项,您可以通过迭代枚举来工作,或者正如其他人之前所说的使用某种类型的容器,通过迭代相同的枚举作为此处的示例:如何迭代枚举? 以及有关枚举的更多信息以防万一:https ://docs.microsoft.com/en-us/cpp/cpp/enumerations-cpp?view=vs-2019
推荐阅读
- php - 如何将 cmb2 限制为特定页面模板
- nativescript - Nativescript CameraPlus 预览也放大了
- javascript - 在 setInterval 运行后,PHP javascript 刷新 div 用多个计时器打破页面
- java - 我的神经网络应该使用什么输入?
- php - 使用 $wpdb->insert 将包含撇号的用户输入文本保存到数据库表中
- java - 已编辑!!未调用的 getter 函数导致 JPanel 在错误的位置重新打印
- firebase - 将 Firebase Crashlytics SDK 列入白名单
- android - Recyclerview 选择:createSelectSingleAnything 滚动时选择多个
- google-apps-script - 调用库中的另一个函数时,内部函数出现语法错误
- java - 我在java中使用jopendocument解析ods文件合并单元格有冲突吗?