我正在从二进制文件中读取 enum
值,并想检查该值是否真的是 enum
值的一部分。我该怎么做?
#include <iostream>
enum Abc
{
A = 4,
B = 8,
C = 12
};
int main()
{
int v1 = 4;
Abc v2 = static_cast< Abc >( v1 );
switch ( v2 )
{
case A:
std::cout<<"A"<<std::endl;
break;
case B:
std::cout<<"B"<<std::endl;
break;
case C:
std::cout<<"C"<<std::endl;
break;
default :
std::cout<<"no match found"<<std::endl;
}
}
我必须使用 switch
运算符还是有更好的方法?
编辑
我设置了枚举值,不幸的是我无法修改它们。更糟糕的是,它们不是连续的(它们的值是 0、75、76、80、85、90、95、100 等)
原文由 BЈовић 发布,翻译遵循 CC BY-SA 4.0 许可协议
enum
如果值在以下标准规则定义的范围 [A, B] 内,则该值在 C++ 中有效。所以在 — 的情况下,enum X { A = 1, B = 3 }
2
值被认为是一个有效的枚举值。考虑标准的 7.2/6:
C++ 中没有追溯。采取的一种方法是在数组中另外列出枚举值,并编写一个包装器来进行转换,并可能在失败时抛出异常。
有关更多详细信息,请参阅有关如何将 int 转换为枚举的 类似问题。