動的なデリゲートはシリアライズすることができます。デリゲートの関数は名前で検索され、通常のデリゲートよりも動作が遅くなります。
動的デリゲートの宣言
動的デリゲートは、動的デリゲート固有の可変長マクロを使用する点を除いて 通常のデリゲートの宣言 と同じ方法で 宣言します。
マクロ宣言 | 説明 |
---|---|
DECLARE_DYNAMIC_DELEGATE[_RetVal, ...]\( DelegateName \) |
動的なデリゲートを作成します。 |
DECLARE_DYNAMIC_MULTICAST_DELEGATE[_RetVal, ...]\( DelegateName \) |
動的なマルチキャスト デリゲートを作成します。 |
動的デリゲートのバインディング
ヘルパーマクロ | 説明 |
---|---|
BindDynamic( UserObject, FuncName ) |
動的デリゲートでBindDynamic() を呼び出すためのヘルパーマクロです。自動的に関数名の文字列を生成します。 |
AddDynamic( UserObject, FuncName ) |
動的なマルチキャストデリゲートで AddDynamic() を呼ぶヘルパーマクロです。自動的に関数名の文字列を生成します。 |
RemoveDynamic( UserObject, FuncName ) |
動的なマルチキャスト デリゲートで RemoveDynamic() を呼ぶヘルパー マクロです。自動的に関数名の文字列を生成します。 |
動的デリゲートの実行
デリゲートと結合している関数は、デリゲートの Execute()
関数を呼ぶと実行されます。デリゲートが結合しているかどうかを実行前に確認する必要があります。デリゲートに戻り値があり、初期化されておらず、後でアクセスされる出力パラメータを持つ場合があるため、
コードをより安全にする目的で行います。結合していないデリゲートを実行すると、
場合によってはメモリ上に実際に書き込まれることがあります。デリゲートの実行が安全かどうかは IsBound()
を呼び出して確認できます。デリゲートに戻り値がない場合も ExecuteIfBound()
を呼び出せますが、
初期化されていない可能性のある出力パラメータに注意してください。
実行関数 | 説明 |
---|---|
Execute |
結合をチェックせずにデリゲートを実行します |
ExecuteIfBound |
デリゲートが結合されているかを確認し、結合している場合は Execute を呼び出します |
IsBound |
デリゲートが結合されているかを確認します (Execute の呼び出しを含むコードの前の場合が多い) |
マルチキャスト デリゲートの実行に関する詳細は「マルチキャスト デリゲート」を参照してください。