All Delegate types require the bound function to match the delegate’s signature. If you don’t know what the function’s signature is, check the delegate declaration from its header file.
Below examples show usage with multicast delegates. Singlecast delegates work the same way, but the functions are called BindSomething
instead of AddSomething
.
A note on editors
If you are using an editor that doesn’t properly support Unreal’s macros, you might not get the correct autocompletion when adding delegates. AddDynamic
in particular is problematic.
See: Setting up editors for Unreal development
Dynamic delegates
For dynamic delegates, the object you’re binding to must be an UObject.
//Typical usage to bind to a function in the current class:
MyDelegate.AddDynamic(this, &ThisClass::FunctionName);
Non-dynamic delegates
Non-dynamic delegates can bind to objects that aren’t UObjects, but the most common use is binding to an UObject via AddUObject
//Typical usage to bind to a function in the current class:
MyDelegate.AddUObject(this, &ThisClass::FunctionName);
These can also bind to lambdas which can be convenient:
MyDelegate.AddLambda([](DelegateParam* Foo) {
//do something
});
How to tell if a delegate is dynamic or not
Other than IDE code-assist, there’s no other way to tell besides looking at how the delegate is declared. If it uses one of the DECLARE_DYNAMIC...
macros, it’s a dynamic delegate.