有没有办法重载转换运算符以在两个枚举之间进行转换?
在我的代码中有
enum devStatus
{
NOT_OPERATING,
INITIALISING,
DEGRADED,
NORMAL
};
enum dataStatus
{
UNAVAILABLE = 1,
DEGRADED,
NORMAL
}
其中 NOT_OPERATING 和 INITIALISING 映射到 UNAVAILABLE; DEGRADED 和 NORMAL map 直接穿过。这些由外部接口(interface)固定。
我正在寻找一种在 devStatus
和 dataStatus
之间进行转换的方法,并且希望能够编写如下内容:
devStatus devSts;
getDeviceStatus(&devSts);
dataStatus dataSts = (dataStatus)devSts;
我知道如果这些是类,我可以编写 devStatus::operator dataStatus()
来执行此操作。有没有办法对枚举执行此操作?
我可以有一个免费的功能
dataStatus devStatus2dataStatus(const devStatus& desSts)
最佳答案
在 C++ 中,转换运算符只能在类、结构和 union 声明中声明。它们不能在类型之外声明(例如 operator+)。枚举类型声明不支持实例成员,因此您需要使用转换函数。这样做也会让调用代码更加清晰。以下示例演示了这一点,使用自定义命名空间来限定枚举和转换函数的范围:
namespace TheirEnum {
enum Type {
Value1,
Value2
};
}
namespace MyEnum {
enum Type {
Value1,
Value2
};
TheirEnum::Type ToTheirEnum (Type e) {
switch (e) {
case Value1: return TheirEnum::Value1;
case Value2: return TheirEnum::Value2;
default: throw std::invalid_argument("e");
}
}
}
// usage:
TheirEnum::Type e = MyEnum::ToTheirEnum(MyEnum::Value1);
关于c++ - 在两个枚举之间重载转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311477/