2つの列挙型を変換するためにキャスト演算子をオーバーロードする方法はありますか?私は2つの列挙型間のオーバーロードキャスト演算子
enum devStatus
{
NOT_OPERATING,
INITIALISING,
DEGRADED,
NORMAL
};
enum dataStatus
{
UNAVAILABLE = 1,
DEGRADED,
NORMAL
}
NOT_OPERATINGとUNAVAILABLEにマップを初期化を持っている私のコードで
。 DEGRADEDとNORMALはまっすぐに写像します。これらは外部インターフェイスによって固定されています。
私はdevStatus
とdataStatus
の間で変換する方法を探していますとのようなものを書くことができるようにしたいと思います:
devStatus devSts;
getDeviceStatus(&devSts);
dataStatus dataSts = (dataStatus)devSts;
私はこれらのクラスがあった場合、私はこれを行うにはdevStatus::operator dataStatus()
を書くことができていることを知っています。列挙型のためにこれを行う方法はありますか?私は自由な関数にC++で dataStatus devStatus2dataStatus(const devStatus& desSts)
代わりに各列挙型と変換演算子のクラスを定義する利点と欠点は何ですか?下位の定型コード。上の部分では、外部の名前空間の周囲に浮動小数点の変換関数はありませんが、列挙型はすでにそこに浮かんでいると言われていますが。効率はコンパイラの最適化と同一でなければなりません。 –
私はC++ enumの名前スコープが理想的ではないことに同意しますが、enum宣言と変換関数をネームスペースでラップすることで簡単に避けることができます。そのパスを下ると、is-a/has-a関係や、そのタイプにどの演算子を提供する必要があるかなど、論理的な問題が発生します。私は、そうすることがおそらく大部分の列挙では過度のことだと思います。 –
答えをサンプルの名前空間宣言とサンプル使用法で更新しました。 –