在编译时获取枚举常量的最大值

时间:2014-03-19 15:12:14

标签: c++ enums

有没有办法获得枚举常量的最大值?

因为枚举常量可能已明确赋值,但它不一定是最后一个元素。大多数情况下有一个常量称为XXX_cnt,但在我的情况下它不是。此外,枚举可能会在没有我注意的情况下进行更改,因此仅使用最后一个元素很容易出错。

那有什么办法吗?

5 个答案:

答案 0 :(得分:2)

没有。这就是为什么有时您可以在枚举类型中找到 max min 的明确定义:

enum e { zero, one, two, min = zero, max = two};

答案 1 :(得分:1)

实现此目的的一种方法是将枚举包装在类中:

class CustomEnum
{
public:
    enum CustomEnumValues
    {
        // some values here
    };

    static CustomEnumValues Maximum()
    {
        // return the maximum value
    }
    // ...
};

如果枚举更改,则还需要更新类。限制更改的一种方法是使MAXIMUMMINIMUM枚举值设置为枚举中当前最大值和最小值的值(因此Maximum函数将返回总是MAXIMUM。您还可以添加隐式强制转换运算符以直接将类强制转换为枚举。

答案 2 :(得分:0)

您在C ++中没有像其他语言一样的反射功能。所以不幸的是不可能。

答案 3 :(得分:0)

没有优雅的方法,但您可以使用Enum classes并依赖编译器优化。

这样的类有迭代器,所以你可以在运行时迭代所有枚举并找到最大的值,它实际上没有任何成本,因为编译器注意到那些值在运行时没有改变,所以启用了优化(不确定哪个level)编译器使用在计算过程中计算的常量。

答案 4 :(得分:0)

使用constexpr可以确保枚举迭代器策略将为枚举类提供最大值。 也许模板元编程也允许它。