有没有办法获得枚举常量的最大值?
因为枚举常量可能已明确赋值,但它不一定是最后一个元素。大多数情况下有一个常量称为XXX_cnt,但在我的情况下它不是。此外,枚举可能会在没有我注意的情况下进行更改,因此仅使用最后一个元素很容易出错。
那有什么办法吗?
答案 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
}
// ...
};
如果枚举更改,则还需要更新类。限制更改的一种方法是使MAXIMUM
和MINIMUM
枚举值设置为枚举中当前最大值和最小值的值(因此Maximum
函数将返回总是MAXIMUM
。您还可以添加隐式强制转换运算符以直接将类强制转换为枚举。
答案 2 :(得分:0)
您在C ++中没有像其他语言一样的反射功能。所以不幸的是不可能。
答案 3 :(得分:0)
没有优雅的方法,但您可以使用Enum classes并依赖编译器优化。
这样的类有迭代器,所以你可以在运行时迭代所有枚举并找到最大的值,它实际上没有任何成本,因为编译器注意到那些值在运行时没有改变,所以启用了优化(不确定哪个level)编译器使用在计算过程中计算的常量。
答案 4 :(得分:0)
使用constexpr可以确保枚举迭代器策略将为枚举类提供最大值。 也许模板元编程也允许它。