c++ - 将枚举转换为值的正确方法
问题描述
我从事的项目有很多这样定义的枚举:
enum BundleSize
{
BUNDLE_SIZE_5 = 5,
BUNDLE_SIZE_10 = 10,
BUNDLE_SIZE_107 = 107,
};
我编写了一个函数来从中获取值,例如:
int convertBundleSizeEnumToVal(BundleSize b)
{
switch(b)
{
case BUNDLE_SIZE_5: return 5; break;
case BUNDLE_SIZE_10: return 10; break;
case BUNDLE_SIZE_107: return 107; break;
default: // handle appropriately and error out
}
}
我意识到我真的不需要转换器(方法 1 和 2 都在下面工作):
BundleSize b = getRandomBundleSize();
printf("The size is %d\n", convertBundleSizeEnumToVal(b)); // method 1
printf("The size is %d\n", b); // method 2
但我觉得方法 1 仍然是执行此操作的“正确”方法,因为将来可能会出现这样的情况:
enum BundleSize
{
BUNDLE_SIZE_5 = 5,
BUNDLE_SIZE_5_POINT_5 = 6,
BUNDLE_SIZE_10 = 10,
BUNDLE_SIZE_107 = 107,
};
现在,它有效地破坏了方法 2,而没有明显的运行时错误,而方法 1 至少会在默认的 switch 案例中发现问题。
我很好奇人们认为处理这些转换的正确方法。
解决方案
您可以使用static_cast
运算符:
static_cast<int>(b)
IMO,这是“正确的”。您不应该定义函数来将每个可能的枚举变量转换为整数,尤其是对于大型枚举。
推荐阅读
- php - 使用 PHP 变量动态设置多个文本框名称并从中获取值?
- configuration - 赛普拉斯配置是否缓存?
- spring-boot - 处理 JWT SignatureException 的最佳方法
- javascript - 如何使用 d3.js 在螺旋图上绘制度数
- ruby-on-rails - 如何在 Rails rake 任务中运行验证
- bash - 调用者脚本结束时结束的 shell 脚本
- java - 来自环境变量的 Apache Beam 配置
- scikit-learn - 具有 sklearn 差异的 PCA
- multithreading - 调优 gRPC 线程池
- regex - 正则表达式只有字母和 - 允许