C++ Unreal Engine 封装委托

C++ Unreal Engine encapsulate delegates

我是 unreal engine 和 c++ 的新手。我有一个 class,我在其中定义了一个带有一个参数和 return 类型的委托:

DECLARE_DELEGATE_RetVal_OneParam(bool, FInteractionValidatorDelegate, APlayerController*)

我添加了一个 属性 包含这个代表:

FInteractionValidatorDelegate Validator;

在另一个 class 中,我绑定委托:

SomeComponent->Validator.BindUObject(this, &AInteractable::IsValid)

一切正常,但我不想公开委托,因此我想通过向我的组件添加 BindValidator() 方法来封装它。这样做的最佳方法是什么?

你可以这样写一个函数:

void yourComponent::BindValidator(UObject * obj, void(*func)(bool))
{
    Validator.BindUObject(obj, func);
}

但我建议不要这样做,首先是因为传递函数的指针会使由此产生的错误难以发现(委托已经足够混淆,有很多宏和生成的函数),而且你将无法将其暴露给蓝图。

在 UE4 的处理方式中,您可以将委托作为 FName 像这样:

void yourComponent::BindValidator(UObject * obj, FName functionName)
{
    Validator.BindUFunction(obj, functionName);
}

这里是UE4在做函数的声明匹配。

希望对您有所帮助!