有没有办法重载一个强制转换操作符以在两个枚举之间进行转换?
在我的代码中我有
enum devStatus
{
NOT_OPERATING,
INITIALISING,
DEGRADED,
NORMAL
};
enum dataStatus
{
UNAVAILABLE = 1,
DEGRADED,
NORMAL
}
其中NOT_OPERATING和INITIALISING映射到UNAVAILABLE; DEGRADED和NORMAL直接映射。这些由外部接口修复。
我正在寻找一种在devStatus
和dataStatus
之间进行转换的方法,并希望能够编写如下内容:
devStatus devSts;
getDeviceStatus(&devSts);
dataStatus dataSts = (dataStatus)devSts;
我知道如果这些是课程,我可以写devStatus::operator dataStatus()
来做这件事。有没有办法为枚举做这个?
我可以有一个免费的功能
dataStatus devStatus2dataStatus(const devStatus& desSts)
答案 0 :(得分:13)
在C ++中,转换运算符只能在class,struct和union声明中声明。它们不能在类型之外声明(例如,运算符+)。枚举类型声明不支持实例成员,因此您需要使用转换函数。这样做也会使调用代码更清晰。以下示例演示了这一点,使用自定义命名空间来限定枚举和转换函数的范围:
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);