在 C++ enum pattern 之后我已经在这里描述过,我试图做类似的事情,但这次我想要使用的值序列不包含连续整数。
代码明显错误:
class Rotations
{
enum PossibleIndexes
{
ZERO,
PLUS180,
PLUS90,
MINUS90
};
enum PossibleValues
{
ZERO= 0,
PLUS180= 180,
PLUS90= 90,
MINUS90= -90
};
static int Count() { return MINUS90 + 1; }
static PossibleValues Default(){ return ZERO; }
};
因为两个枚举的固有元素之间会存在冲突。
所以我的问题是:实现固定数量的硬编码旋转 {0, 180, 90, -90} 的最佳方法是什么,它还具有默认和计数功能?
最佳答案
您始终可以保留一个包含所有可能值的静态 std::initializer_list
namespace PossibleValues
{
enum Type
{
ZERO= 0,
PLUS180= 180,
PLUS90= 90,
MINUS90= -90
};
constexpr auto Values = {ZERO, PLUS180, PLUS90, MINUS90};
size_t Count() { return Values.size(); }
Type Default() { return *begin(Values); }
}
这种方法的额外好处是能够在 for 循环中迭代枚举的值
注意:我希望编译器可以生成所有代码,至少对于枚举类是这样
关于c++ - 非顺序整数 C++ 枚举的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30482218/