C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

UE4 における enum class の「フラグ」化

// ↓ブループリントで使わない場合はこの1行は不要
UENUM( BlueprintType, meta=( Bitflags ) )
enum class EHoge: uint8
{ EV_Nothing = 0
, EV_Flag1 = 0x01
, EV_Flag2 = 0x02
, EV_Flag3 = 0x04
, EV_Flag4 = 0x08
, EV_FlagAll =
    EV_Flag1 |
    EV_Flag2 |
    EV_Flag3 |
    EV_Flag4
};
// ↑ こんな enum class に ↓ このマクロを通しておく(今回の本題)
ENUM_CLASS_FLAGS( EHoge )

ENUM_CLASS_FLAGS マクロに通しておくと、 EHoge で次のようなフラグ計算でお馴染みの機能についてユーザー独自に定義したり、 underlying_type_tstatic_cast して云々など必要なくなり、楽ができるようになる。

auto a = EHoge::Nothing;
// フラグ追加
a |= EHoge::EV_Flag3;
// フラグ判定
auto result_of_any = ( a & EHoge::EV_FlagAll ) != EHoge::EV_Nothing;

参考

  1. Bitmask Enum declaration in 4.12, what's missing? - UE4 AnswerHub