マルチキャスト デリゲートは、シングルキャスト デリゲートとほぼ同じ機能を持ちます。マルチキャスト デリゲートはオブジェクトに対し弱い参照を持ち、構造体に使用したり簡単にコピーすることができます。
通常のデリゲート同様に、マルチキャスト デリゲートは読み込みや保存、そして間接的にトリガーすることができますが、マルチキャストの関数は戻り値を使用することはできません。これらはデリゲートのコレクションを
簡単に渡すために使用されます。
イベント は Broadcast()
、IsBound()
、Clear()
関数へのアクセスが限られる、特別なタイプのマルチキャスト デリゲートです。
マルチキャストデリゲートの宣言
マルチキャスト デリゲートは、マルチキャスト デリゲート固有の可変長マクロを使用する点を除いて 通常のデリゲートの宣言 と同じ方法で宣言します。
マクロ宣言 | 説明 |
---|---|
DECLARE_MULTICAST_DELEGATE[_RetVal, ...]\( DelegateName \) |
マルチキャスト デリゲートを作成します。 |
DECLARE_DYNAMIC_MULTICAST_DELEGATE[_RetVal, ...]\( DelegateName \) |
動的なマルチキャスト デリゲートを作成します。 |
マルチキャスト デリゲートの結合
マルチキャスト デリゲートは、デリゲートが発行されると呼び出されるすべてを結合した複数の関数を持つことができます。結果として、結合している関数はセマンティクスの配列のようになります。
関数 | 説明 |
---|---|
Add() |
このマルチキャスト デリゲートの呼び出しリストに関数デリゲートを追加します。 |
AddStatic() |
RAW C++ ポインタのグローバル関数デリゲートを結合します。 |
AddRaw() |
Raw の C++ ポインタ デリゲートを追加します。オブジェクト RAW ポインタはいかなるタイプの参照も使用しないので、オブジェクトがデリゲート側から破棄された場合の呼び出しが安全ではない場合があります。Execute()! の呼び出しには注意してください。 |
AddSP() |
シェアード ポインタベース (高速ですがスレッド セーフではありません) のメンバー関数デリゲートを追加します。シェアード ポインタはオブジェクトに対する弱い参照を保ちます。 |
AddUObject() |
UObject ベースのメンバー関数デリゲートを追加します。UObject デリゲートはオブジェクトに対する弱い参照を保ちます。 |
Remove() |
マルチキャスト デリゲートの呼び出しリスト (パフォーマンスは O (N)) から関数を削除します。デリゲートの順序は保存されないことに注意してください。 |
RemoveAll() |
特定の UserObject に結合されたマルチキャスト デリゲートの呼び出しリストから全ての関数を削除します。デリゲートの順序は保存されないことに注意してください。 |
RemoveAll()
は提供されたポインタへの結合が登録されたデリゲートをすべて削除します。オブジェクト ポインタに結合されていない Raw デリゲートはこの関数では削除されないことに注意してください。
これらの関数の変数、引数、実装については、DelegateSignatureImpl.inl
(..\UE4\Engine\Source\Runtime\Core\Public\Delegates\
) を参照してください。
マルチキャスト デリゲートの実行
マルチキャスト デリゲートで複数の関数を登録したデリゲートをアタッチすることができます。マルチキャスト デリゲートの Broadcast()
関数を呼ぶことで、これらの関数を一度に実行します。マルチキャスト デリゲートのシグネチャは戻り値を使用することはできません。
何も結合されていない場合も、マルチキャスト デリゲートで Broadcast()
を常に安全に呼ぶことができます。出力変数の初期化では、通常デリゲートの使用はよくないとされています。ご注意ください。
Broadcast()
関数を呼び出すための Bound 関数の実行順序は定義されていません。関数が追加された順序とは異なる場合もあります。
関数 | 説明 |
---|---|
Broadcast() |
失効しているオブジェクトを除いて、デリゲートをすべてのバウンド オブジェクトへ通達します。 |