gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:35:44 25 4
gpt4 key购买 nike

我想在 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。

最佳答案

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

关于C++ 枚举类 - 从 underlying_type 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24184262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com