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

问题描述

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

在 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);

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)