继C++ 枚举模式 https://stackoverflow.com/questions/12972317/count-on-enum-c-automatic我已经在这里描述过,我试图做类似的事情,但这次我想要使用的值序列不包含连续整数。
代码显然是错误的:
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 循环中迭代枚举的值
注意:我希望编译器能够生成所有代码,至少对于枚举类
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)