C でのフラグ列挙型のカスタマイズ
C では、列挙 (enum) は離散値を表すための強力なツールです。ただし、標準の enum 構文には、フラグとして扱うための組み込みメカニズムがありません。この記事では、外部ライブラリに依存せずに C でフラグのような列挙型を実装する方法について説明します。
問題:
次の例を考えてみましょう:
enum AnimalFlags { HasClaws = 1, CanFly = 2, EatsFish = 4, Endangered = 8 }; int seahawkFlags = CanFly | EatsFish | Endangered;
ビットごとの OR 値を enum に代入しようとすると、コンパイラは int/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)); } // Define other operators as needed int seahawkFlags = animalFlags::CanFly | AnimalFlags::EatsFish | AnimalFlags::Endangered;
ビット単位の演算子を提供することで、列挙型は旗のような方法で操作されます。さらに、タイプ セーフティの使用により、有効なフラグの組み合わせのみが enum 変数に割り当てられるようになります。
以上が外部ライブラリを使用せずに C でフラグ列挙型を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。