#memo

indiedev太郎

UObjectのコンストラクタのバリエーション

UObjectのコンストラクタの話、宣言に3つのバリエーションが有る

  1. ClassName() のデフォルトコンストラクタ
  2. ClassName(const class FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) の形をとるもの
  3. 何も宣言しない(GENERATED_BODY()のみ)

こちらのページでも2種類あることが解説されているが、何が違うのかがよくわからない

Unreal Engine | ゲームプレイ クラス

続きを読む

IWYUでコーディングしよう

IWYUとは

4.15で追加された一つの要素として、C++コンパイルの高速化が上げられている

アンリアル 4.15 がリリースされました!

これは、UEのソースコード全体がIWYU(Include-What-You-Use)という方法で再構築された事によるもので、
従来、Engine.h等、同モジュール内の全ヘッダーが網羅されたヘッダー(Monolithic Headerというらしい)をインクルードしていたが、実際に使用している機能はその一部分であることがほとんどであったため、これを必要最低限のインクルードに書き換えることでコンパイル時間の短縮が実現されたのこと、元ネタはそういうツールっぽい

GitHub - include-what-you-use/include-what-you-use: A tool for use with clang to analyze #includes in C and C++ source files

またプラグインのモジュールでもPCHファイルを明示的にインクルードしなくて良くなったなど、なんか微妙に色々変わっている

従来のMonolithic Headerをインクルードするタイプのコーディングは現在も有効だけれども、ビルド時にユーザーが作成したコードに対してもIWYUのオプションが使えるようになっているので、つかっていきましょう

続きを読む

UENUM()マクロの使用

UENUM(BlueprintType)
enum class EHoge : uint8
{
    None,
    Foo UMETA(DisplayName="Bar"),
    Huga
};
  • C++11のscoped enumerationつかう
  • なので値を代入する時は型名修飾が必要
EHoge hoge = EHoge::Huga;

Enums For Both C++ and BP - Epic Wiki