接受函数作为参数的 C++ 模板函数

时间:2021-03-12 17:59:21

标签: c++ callback unreal-engine4 function-parameter

我有一个组件,可以附加到我的角色产生的射弹上。 我想制作一个回调函数,当弹丸击中有效目标时调用该函数。

在 Component.h 中,我声明了一个函数:

    template<class T>
    void OnTargetHit( void (T::*Callback)() );

在 Component.cpp 中是实现:

template<class T>
void UInterpolationComponent::OnTargetHit( void (T::*Callback)() )
{
    (T::*Callback)();
}

现在在我的 Character.cpp 中,我想获取该组件并为其分配一个“回调”函数,该函数将在击中目标时触发,当然该组件可以应用于不同的 Actor,因此我想要从调用类传递一个函数,所以我提供了一个特定的实现:

    AActor* Projectile = GetWorld()->SpawnActor<AActor>(PrimaryAttackProjectile_BP, GetActorLocation(), Rotation);

    UInterpolationComponent* InterpComp = Cast<UInterpolationComponent>(Projectile->GetComponentByClass(UInterpolationComponent::StaticClass()));
    InterpComp->InterpSpeed = 1800.f;
    InterpComp->bHoming = false;
    InterpComp->StaticTarget = Location;
    InterpComp->bIsDestroyable = true;
    InterpComp->OnTargetHit<ACartagraCharacter>(&CalculateDamage);

问题出在最后一行代码上:

    InterpComp->OnTargetHit<ACartagraCharacter>(&CalculateDamage);

我不确定是否应该传递与号,如果我应该包含类名,我尝试了以下所有方法:

    InterpComp->OnTargetHit<ACartagraCharacter>(CalculateDamage);
    InterpComp->OnTargetHit<ACartagraCharacter>(&ACartagraCharacter::CalculateDamage);

它们都不起作用,要么给我一个&符号错误,要么在最后一种情况下出现它给我一个链接器错误。我也尝试使它们成为静态函数,但这并没有太大意义,因为组件是在每个生成的射弹上实例化的。 我是模板函数的新手,不知道该怎么做。请帮忙。

0 个答案:

没有答案
相关问题