【问题标题】:C++ Unreal Engine encapsulate delegatesC++ Unreal Engine 封装委托
【发布时间】:2020-02-29 14:49:17
【问题描述】:

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

DECLARE_DELEGATE_RetVal_OneParam(bool, FInteractionValidatorDelegate, APlayerController*)

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

FInteractionValidatorDelegate Validator;

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

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

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

【问题讨论】:

    标签: c++ unreal-engine4


    【解决方案1】:

    你可以写一个这样的函数:

    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 进行函数的声明匹配。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      相关资源
      最近更新 更多