gpt4 book ai didi

c++ - 从整数转换为枚举值时如何以及在何处检查错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:53 24 4
gpt4 key购买 nike

假设我有一个枚举类

   enum class Sectors {
A = 1, B, C, D, E, F, G, H
};

我需要从文件中读取数据以将数字数据分配给 Sectors 类型的变量。我使用此模板函数将整数转换为枚举值。

   template <typename Enumeration, typename NumType> 
Enumeration NumericToEnum(NumType const value) {
return static_cast<Enumeration>(value);
};

有没有办法检查给定的数值是否真的在给定的枚举范围内?

   Sectors sec1 = NumericToEnum<Sectors>(intValueFromFile); //ok when 2
Sectors sec2 = NumericToEnum<Sectors>(999); //error, out of range

我知道如何在传递给函数之前进行检查(value >= Sectors::A && value <= Sectors::H ),但我更愿意在模板函数中进行检查,并且可能会抛出异常。可能吗?

最佳答案

您可以定义额外的 enum 值来指定范围:

enum class Sectors {
A = 1, B, C, D, E, F, G, H,
SEC_MIN = A, SEC_MAX = H
};

并使用断言检查:

template <typename Enumeration, typename NumType> 
Enumeration NumericToEnum(NumType const value) {
assert((value >= Enumeration::SEC_MIN && value <= Enumeration::SEC_MAX),"value must be in valid range");
return static_cast<Enumeration>(value);
};

关于c++ - 从整数转换为枚举值时如何以及在何处检查错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40936165/

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