安全地将int转换为enum
Safely convert int to enum
我想知道是否有任何聪明的技巧如何安全地将整数转换为enum。在你投票认为这是重复的之前,我并没有问如何转换(int i; Enum e = static_cast<Enum>(i)
很容易)。我问的是如何安全地完成它,验证结果值确实在enum中。
代码
enum class E {
A = 1,
B = 2
};
int main(int, char **) {
int i = 3;
E e = static_cast<E>(i);
}
将编译(AFAIK),但e
将不包含枚举中的有效值。我想到的最好的方法就是
switch (i) {
case 1:
return E::A;
case 2:
return E::B;
default:
throw invalid_argument("");
}
,它1)看起来不太聪明2)不能很好地缩放。我也许可以把一些宏放在一起使它更容易,但它仍然看起来很愚蠢。
有什么标准吗?怎么做呢?
如果您不需要转换数值,我建议使用
switch (i)
{
case static_cast<int>(E::A):
case static_cast<int>(E::B):
return static_cast<E>(i);
default:
throw invalid_argument("");
}
至少可以防止一些常见的错误,比如忘记更改大小写或返回值,或者只是查找错误的数值。而且它更易于重构(考虑改变数值——毕竟你定义了一个enum,所以不必在多个地方改变值)。
不幸的是,这仍然不是很好,但这是我知道的最好的方法。除非你想使用X宏
相关文章:
- enum是C++中的宏变量还是整数变量
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 是否可以从int转换为enum类类型
- 如何限制从int到enum类的转换
- 为什么C/C++会自动将char/wchar_t/short/bool/enum类型转换为int
- snprintf变量列表不会将enum转换为char*
- 在QTableView中将数据从QSqlTableModel转换为人类形式(enum -> String)
- 将Enum转换为布尔类型
- 转换c++中enum变量中的字符串变量
- 对整型到enum的转换进行Static_cast
- 是否可以使作用域枚举("enum class")在上下文中可转换为布尔值?
- 将enum强制转换为整型
- c++不能从enum转换为LPCTSTR
- 为什么enum隐式地转换为std::string ?
- 安全地将int转换为enum