首页 > 解决方案 > 将枚举转换为值的正确方法

问题描述

我从事的项目有很多这样定义的枚举:

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 案例中发现问题。

我很好奇人们认为处理这些转换的正确方法。

标签: c++

解决方案


您可以使用static_cast运算符:

static_cast<int>(b)

IMO,这是“正确的”。您不应该定义函数来将每个可能的枚举变量转换为整数,尤其是对于大型枚举。


推荐阅读