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在做函数的声明匹配。
希望对您有所帮助!
我是 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在做函数的声明匹配。
希望对您有所帮助!