Lambdas with TFunctionRef<T>

TFunctionRef<T> is an Unreal-friendly way of letting you define and use Lambda functions. If you are unfamiliar with Lambda functions in C++, you should research what they are first before trying to use the following.

TFunctionRef<int32 (const FString& str)> Thing

Imagine we have a function that takes a list of items as input, and it performs some actions on each one, and then passes them on to another internal object. We might want to let the user specify a custom initializer function that is called on each item before it is handed off.

We can do this by adding a TFunctionRef<T> parameter to our function, as shown below.

void SetupContents(const TArray<UObject>& StuffToAdd,
	TFunctionRef<void (UInternalObject* Thing> CustomInitializer)
{
	// Take the provided UObject stuff, create some, kind of internal
	// data structure...
	TArray<UInternalObject> CreatedObjects;
	for (int32 i = 0; i < CreatedObjects.Num(); ++i)
	{
		// Call the provided function on each instance
		CustomInitializer(CreatedObjects[i]);
	}
}

With a function definition above, how do we call it and provide a Lambda function that it will accept?

SetupContents(MyStuff, [](UInternalObject* Thing)
{
  // Do something with Thing to initialize it
});