UObjectのコンストラクタのバリエーション
UObjectのコンストラクタの話、宣言に3つのバリエーションが有る
- ClassName() のデフォルトコンストラクタ
- ClassName(const class FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) の形をとるもの
- 何も宣言しない(GENERATED_BODY()のみ)
こちらのページでも2種類あることが解説されているが、何が違うのかがよくわからない
続きを読む
IWYUでコーディングしよう
IWYUとは
4.15で追加された一つの要素として、C++コンパイルの高速化が上げられている
これは、UEのソースコード全体がIWYU(Include-What-You-Use)という方法で再構築された事によるもので、
従来、Engine.h等、同モジュール内の全ヘッダーが網羅されたヘッダー(Monolithic Headerというらしい)をインクルードしていたが、実際に使用している機能はその一部分であることがほとんどであったため、これを必要最低限のインクルードに書き換えることでコンパイル時間の短縮が実現されたのこと、元ネタはそういうツールっぽい
またプラグインのモジュールでもPCHファイルを明示的にインクルードしなくて良くなったなど、なんか微妙に色々変わっている
従来のMonolithic Headerをインクルードするタイプのコーディングは現在も有効だけれども、ビルド時にユーザーが作成したコードに対してもIWYUのオプションが使えるようになっているので、つかっていきましょう
仮想関数まわり、NativeEvent関数のオーバーライドについて
miyahuji111.hatenablog.com
NativeEvent、ImplementableEventについては上記を参考
通常のvirtual付き関数と、NativeEvent指定した関数の継承時の振る舞いについてまとめる
続きを読むUENUM()マクロの使用
UENUM(BlueprintType) enum class EHoge : uint8 { None, Foo UMETA(DisplayName="Bar"), Huga };
- C++11のscoped enumerationつかう
- なので値を代入する時は型名修飾が必要
EHoge hoge = EHoge::Huga;