C++枚举类 - 从underlying_type初始化

Vol*_*lkA 7 c++ enums c++11

我想从其底层类型初始化C++ 11中的强类型枚举,这是我从序列化流中读取的值,我必须检查正确的数字范围.

就像是:

enum class MyEnum {
    FOO, BAR
};

MyEnum test = static_cast<MyEnum>(1);
Run Code Online (Sandbox Code Playgroud)

这按预期工作,但问题是:

MyEnum test2 = static_cast<MyEnum>(42);
Run Code Online (Sandbox Code Playgroud)

也工作,并没有指出错误.据我所知,枚举类也没有任何关于如何检查输入是否有效的界限或其他指标的概念.在"旧式"枚举中,我们将包含MIN和MAX值并与这些值进行比较,但是将这些值添加到强类型枚举中会再次向此类型添加无效值,从而破坏其目的.

任何想法如何检查边界或强制错误,以防值超出界限?

更新:

我刚试过std :: numeric_limits,但这对枚举类也不起作用:

cout << static_cast<unsigned int>(numeric_limits<MyEnum>::min()) << endl;
cout << static_cast<unsigned int>(numeric_limits<MyEnum>::max()) << endl;
Run Code Online (Sandbox Code Playgroud)

都返回0.

Jef*_*kin 6

目前无法提取枚举的最小或最大枚举数,但http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3815.html提出了足够的新类型特征来实现库这可以做到这一点.反思小组很感兴趣,但要求作者回过头来提出更明确地推广到其他反思特征的提案.我相信http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4027.pdf是这种概括的结果,它将在本周的会议上讨论.