UE5/UE4 C++で「Enum」を「foreach」を使ったループ文で指定した2つの値の間を連続で処理する(UENUM、TEnumRange、ENUM_RANGE_BY_FIRST_AND_LAST)
C++で「Enum」を「foreach」を使ったループ文で指定した2つの値の間を連続で処理する方法です。
こちらを参考にさせていただきました。
・enumをインデックスとした便利な配列の作り方
https://qiita.com/Naotsun/items/3036a2c450f10d2ba300
「TEnumRange」については以下でも色々と説明されていますが、
今回はその中の「ENUM_RANGE_BY_FIRST_AND_LAST」を使って指定した2つの値の間を連続で処理する方法です。
・Iterating over UENUM with TEnumRange
https://benui.ca/unreal/iterate-over-enum-tenumrange/
というわけで実際に使ってみます。
まずは「UENUM」を定義します。
今回は「ENUM_RANGE_BY_FIRST_AND_LAST」で指定して使うので値は何でも問題ありません。
第一引数で指定した「Enum」を、第二引数と第三引数で指定した値の間を連続で処理するためのものになります。
上記の「Enum」を「TEnumRange」を使って指定した2つの値の間を順番に処理する記述はこんな感じになります。
結果はこんな感じになりました。

あまり使う機会はなさそうですが、覚えておくとどこかで使えるかもしれないと思いました。
こちらを参考にさせていただきました。
・enumをインデックスとした便利な配列の作り方
https://qiita.com/Naotsun/items/3036a2c450f10d2ba300
こちらについてとなります。ENUM_RANGE_BY_COUNTマクロはUENUMをforeachで簡単に回せるTEnumRangeというクラステンプレートを使うために定義しています。
「TEnumRange」については以下でも色々と説明されていますが、
今回はその中の「ENUM_RANGE_BY_FIRST_AND_LAST」を使って指定した2つの値の間を連続で処理する方法です。
・Iterating over UENUM with TEnumRange
https://benui.ca/unreal/iterate-over-enum-tenumrange/
というわけで実際に使ってみます。
まずは「UENUM」を定義します。
今回は「ENUM_RANGE_BY_FIRST_AND_LAST」で指定して使うので値は何でも問題ありません。
「ENUM_RANGE_BY_FIRST_AND_LAST」はUENUM(BlueprintType)
enum class ENewEnumFirstAndLast : uint8
{First = 0,
Second = 4,
Third = 8,};ENUM_RANGE_BY_FIRST_AND_LAST(ENewEnumFirstAndLast, ENewEnumFirstAndLast::First, ENewEnumFirstAndLast::Second);
第一引数で指定した「Enum」を、第二引数と第三引数で指定した値の間を連続で処理するためのものになります。
上記の「Enum」を「TEnumRange」を使って指定した2つの値の間を順番に処理する記述はこんな感じになります。
// Enum の数だけ処理を行う
// ENUM_RANGE_BY_FIRST_AND_LAST() を使った処理
for(ENewEnumFirstAndLast aEnum : TEnumRange< ENewEnumFirstAndLast>()){// ログを出力}
UE_LOG(LogTemp, Log, TEXT("%d"), static_cast< int32>(aEnum) );
結果はこんな感じになりました。

あまり使う機会はなさそうですが、覚えておくとどこかで使えるかもしれないと思いました。
| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑