有没有办法重载一个强制转换操作符来转换两个枚举?
在我的代码中我有
enum devStatus
{
NOT_OPERATING,
INITIALISING,
DEGRADED,
NORMAL
};
enum dataStatus
{
UNAVAILABLE = 1,
DEGRADED,
NORMAL
}
Run Code Online (Sandbox Code Playgroud)
其中NOT_OPERATING和INITIALISING映射到UNAVAILABLE; DEGRADED和NORMAL直接映射.这些由外部接口修复.
我正在寻找一种转换方式devStatus,dataStatus并希望能够写出类似的东西:
devStatus devSts;
getDeviceStatus(&devSts);
dataStatus dataSts = (dataStatus)devSts;
Run Code Online (Sandbox Code Playgroud)
我知道,如果这些是课程,我可以写devStatus::operator dataStatus()这样做.有没有办法为枚举这样做?
我可以有一个免费的功能
dataStatus devStatus2dataStatus(const devStatus& desSts)
Bre*_*ell 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3844 次 |
| 最近记录: |