【问题标题】:Is there a Macro for a Function Pointer? UE4 C++函数指针有宏吗? UE4 C++
【发布时间】:2020-08-27 17:02:26
【问题描述】:

我在 ue4 c++ 中创建了一个函数指针,但不知道我可以/应该将哪个宏用于头文件中的指针。 (像 UPROPERTY() 或 UFUNCTION() 之类的东西)

为什么我什至想使用宏?由于垃圾收集,据我所知,gb 仅在变量/函数具有宏时才有效。

顺便说一句,函数指针调用和普通函数调用一样高效吗?

header.h 代码:

typedef void (AWeaponGun::*FireTypeFunctionPtr)(void);    
FireTypeFunctionPtr PtrFireType;
    
UFUNCTION()
void FireLineTrace();

file.cpp 代码:

void AWeaponGun::BeginPlay()
{
    PtrFireType = &AWeaponGun::FireLineTrace;
}

void AWeaponGun::Tick(float DeltaTime)
{
    (this->*PtrFireType)();
}

【问题讨论】:

  • 您不需要使用任何带有函数指针的宏。但是,如果您想要某种智能函数指针,当它的目标所有者被删除时可以自行为空,那么您可能需要查看delegates(将它们绑定到 uobjects 或通过共享指针具有这种行为)。

标签: c++ unreal-engine4


【解决方案1】:

函数和你的函数指针没有被分配和释放,所以在这种情况下你不需要垃圾收集器,因此你不需要任何 UE4 宏(......如果你只考虑垃圾收集器)。

至于性能,函数指针的性能很可能稍差,因为它增加了一个变量并且需要额外的指令才能到达函数。但是编译器在某些情况下可能能够优化一些差异。 您需要检查在这两种情况下创建的汇编代码以确定。

【讨论】:

    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2016-10-06
    相关资源
    最近更新 更多