c++ - 非顺序整数 C++ 枚举的最佳方法是什么

标签 c++ enums count default

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/

相关文章:

c++ - FFT 和 IFFT 与 FFTW

c++ - VS 2010 的行计数器

c# - 带有枚举参数的方法的 Web API 帮助页面

Python 混合枚举作为字典键 : how the type is converted?

ruby-on-rails - Boolean Enum throws Action can't be blank for false value in Rails-Admin

c++ - VC++编译器升级2010->2015重新定义; 'constexpr' 说明符不匹配

c++从不变函数返回时断言失败

Javascript 获取英文计数

php - 对mysql表进行排序并按金额排序

MySQL使用左连接计算查询的行数