0x4*_*D18 7 c++ enums integer c++17
假设我有一个像这样的强类型枚举类型:
enum class message : int {
JOIN = 0,
LEAVE = 4,
SPAWN = 1,
}
Run Code Online (Sandbox Code Playgroud)
我需要安全地(在这种情况下,安全地意味着丢弃无效的变体)将其从其基础类型(int)进行转换。
为此,我有一个函数可以将其转换为我:
std::optional<message> get_message(int num) {
return num == (int)message::JOIN || num == (int)message::LEAVE || num == (int)message::SPAWN ? (message)num : {};
}
Run Code Online (Sandbox Code Playgroud)
这是可行的,但是编写起来很长并且容易出错,尤其是对于具有大量变体的枚举。
有没有办法在C ++ 17中自动执行此过程?
小智 0
谈论底层类型,我们注意到此类仅使用另一种类型作为模型来获取类型,但它不会在这些类型之间转换值或对象。
作为简化函数的一个选项,您可以通过在枚举中迭代来工作,或者像其他人之前所说的某种类型的容器一样,通过迭代相同的枚举作为示例:如何迭代枚举? 以及有关枚举的更多信息,以防万一:https://learn.microsoft.com/en-us/cpp/cpp/enumerations-cpp? view=vs-2019