在两个枚举之间重载强制转换操作符

Dan*_*anS 8 c++ enums casting

有没有办法重载一个强制转换操作符来转换两个枚举?

在我的代码中我有

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)