gpt4 book ai didi

c++ - 安全地将 int 转换为枚举

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:54 26 4
gpt4 key购买 nike

我想知道是否有任何巧妙的技巧可以安全地将整数转换为枚举。在您投票认为这是重复之前,我不是在问如何转换( int i; Enum e = static_cast<Enum>(i) 很简单)。我问的是如何安全地执行此操作,验证结果值确实在枚举中。

代码如下

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("");
}

至少这可以防止一些常见错误,例如忘记更改大小写或返回值,或者只是查找错误的数值。此外,它对重构更友好(考虑更改数值 - 毕竟您定义了一个枚举,这样您不必必须在多个地方更改值)。

不幸的是,这仍然不是很好,但这是我所知道的最好的方式。好吧,除非你想使用 X macros .

关于c++ - 安全地将 int 转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31677236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com