我希望在C++11中从序列化流中读取枚举类型的基础类型,并对其进行正确的数值范围检查,以初始化强类型枚举。类似于以下代码:
这个功能能正常工作,但存在一个问题:
enum class MyEnum {
FOO, BAR
};
MyEnum test = static_cast<MyEnum>(1);
这个功能能正常工作,但存在一个问题:
MyEnum test2 = static_cast<MyEnum>(42);
这也可以正常工作,并且没有指示错误的迹象。就我所见,枚举类也没有任何关于边界或其他指标的概念,以便检查输入是否有效。在“旧式”枚举中,我们将包括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;
两者都返回0。
enum class MyEnum: unsigned int { FOO = 1, BAR = 2 };
然后尝试执行MyEnum test2 = static_cast<MyEnum>(42);
,会发生什么? - shuttle87MyEnum MyEnumFromValue(int v) {...}
- Matthias247int
。在 C++ 中,任何在int
范围内的值都是有效的。如果你想要一个有限范围并进行检查的话,你需要将其实现为一个类类型。 - Cheers and hth. - Alf