【问题标题】:How to assign a method pointer to a TFunction<>?如何将方法指针分配给 TFunction<>?
【发布时间】:2021-11-01 20:04:34
【问题描述】:

我的控制器类中有一个方法,我想将该方法存储在一个 TFunction 对象中。我试过使用: TFunction&lt;void ()&gt; FuncPtr{&amp;PlayerController::ClassMethod}; 它不起作用。 我的函数签名是: void ClassMethod();

【问题讨论】:

  • 如果ClassMethod() 不是static,那么TFunction 将需要一个PlayerController 对象实例来调用ClassMethod()。但是您没有将这样的对象分配给TFunctionTFunction 的设计类似于 C++ 的 std::function,在 C++ 中,您可以使用 std::bind() 或 lambda 将对象实例绑定到 std::function。不确定 Unreal 的等价物。
  • 正如 Remy 所指出的,您将绑定该类的一个实例。 This 覆盖了很多领域。

标签: c++ unreal-engine4


【解决方案1】:
//Let's say so:

.h
UFunction* ExecuteFunction;

UFUNCTION()
    void ChangeState(FName NextState)
UFUNCTION()
    void GlobalState_One()
UFUNCTION()
    void GlobalState_Two()
.cpp

void ChangeState(FName NextState)
{
    FName NameFunction = FName(FString("GlobalState_") + NextState.ToString());
    ExecuteFunction = FindFunction(NameFunction);
}

//Place of call
if (ExecuteFunction != nullptr)
            ProcessEvent(ExecuteFunction, nullptr);
//

//...
ChangeState("One");
//...

void GlobalState_One()
{

}
void GlobalState_Two()
{
    
}

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2013-12-10
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 2017-02-02
相关资源
最近更新 更多