[解決済み】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の範囲を超える場合は適宜修正。
関連
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] C#の[Flags]Enum属性の意味とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】'cout'は型名ではない
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] (x ^ 0x1) != 0 とはどういう意味ですか?