1. ホーム
  2. c++

C++でenumを拡張する?

2023-08-24 12:57:18

質問

C++で列挙型を拡張/"継承"する方法はありますか?

I.E:

enum Enum {A,B,C};
enum EnumEx : public Enum {D,E,F};

あるいは、少なくともそれらの間の変換を定義するか?

どのように解決するのですか?

いいえ、ありません。

enum は、C++では本当にかわいそうなことで、もちろんそれは残念なことです。

でさえも class enum でさえ、この拡張性の問題に対処していません (少なくとも型安全性のためにいくつかのことを行ってはいますが)。

の唯一の利点は enum は存在しないことです。コンパイラによって直接置換されるため、実行時のオーバーヘッドは発生しませんが、ある程度の型安全性は提供されます。

もしあなたがそのような獣を望むなら、あなた自身が働かなければならないでしょう。

  • クラスを作成する MyEnum を含む、(基本的に)int 型の
  • 興味深い値のそれぞれについて、名前付きコンストラクタを作成します。

これで、クラスを自由に拡張(名前付きコンストラクタの追加)できるようになりました...

それは回避策ですが、私は列挙を扱う飽くなき方法を見つけたことがありません...。