1. ホーム
  2. c++

[解決済み】C++でenumをフラグとして使用する方法は?

2022-04-06 21:40:18

質問

治療 enum をフラグとして使用することは、C# でうまく機能します。 [Flags] 属性がありますが、C++でこれを行うにはどうしたらよいのでしょうか?

例えば、こんなことを書いてみたい。

enum AnimalFlags
{
    HasClaws = 1,
    CanFly =2,
    EatsFish = 4,
    Endangered = 8
};

seahawk.flags = CanFly | EatsFish | Endangered;

しかし、以下のようなコンパイラーエラーが発生します。 int / enum の変換を行います。 ぶっきらぼうなキャストではなく、もっと素敵な表現方法はないのでしょうか? できれば、boostやQtのようなサードパーティライブラリの構成に頼りたくないのです。

EDIT: 回答にあるように、コンパイラのエラーを回避するために seahawk.flags として int . しかし、型安全性を確保するための何らかのメカニズムが欲しいところです。 seahawk.flags = HasMaximizeButton .

解決方法は?

正しい方法は、enumにビット演算子を定義することです。

enum AnimalFlags
{
    HasClaws   = 1,
    CanFly     = 2,
    EatsFish   = 4,
    Endangered = 8
};

inline AnimalFlags operator|(AnimalFlags a, AnimalFlags b)
{
    return static_cast<AnimalFlags>(static_cast<int>(a) | static_cast<int>(b));
}

その他、ビット演算子。enumの範囲がintの範囲を超える場合は適宜修正。