C ++虚幻引擎封装委托

问题描述 投票:0回答:1

我是虚幻引擎和C ++的新手。我有一个类,其中定义了一个带有一个参数和一个返回类型的委托:

DECLARE_DELEGATE_RetVal_OneParam(bool, FInteractionValidatorDelegate, APlayerController*)

我添加了一个包含此委托的属性:

FInteractionValidatorDelegate Validator;

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

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

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

c++ unreal-engine4
1个回答
0
投票

您可以编写这样的函数:

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执行功能的声明匹配。

希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.