Mai*_*ein 7 c++ unreal-engine4
我目前正在使用虚幻引擎4,似乎我无法避免一些演员表.
AController* c = this->GetController();
APlayerController* p = (APlayerController*)c;
Run Code Online (Sandbox Code Playgroud)
有没有办法可以在我演员之前检查是否c是一个PlayerController?
如果类至少有一个虚函数(可能),您可以使用dynamic_cast:
APlayerController* p = dynamic_cast<APlayerController*>(c);
Run Code Online (Sandbox Code Playgroud)
如果c在运行时实际上不是正确的类型,这将返回空指针.
编辑除了至少一个虚拟功能外,dynamic_cast还需要在构建中启用运行时类型信息(RTTI).它通常是语言的一部分,但编译器可以支持关闭它.
像许多游戏引擎一样,出于性能原因,虚幻引擎在没有RTTI的情况下进行编译,因此dynamic_cast不起作用.
虚幻引擎提供了自己的替代方案,简称为Cast.我现在找不到任何文档,但这个问题很好地描述了它的用法.
AController* c = this->GetController();
APlayerController* p = Cast<APlayerController>(c);
if (p) {
...
}
Run Code Online (Sandbox Code Playgroud)
AController也有一个方便的方法CastToPlayerController,将做同样的事情:
AController* c = this->GetController();
APlayerController* p = c->CastToPlayerController();
if (p) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果您确定c总是那样,APlayerController那么CastChecked效率更高:
AController* c = this->GetController();
APlayerController* p = CastChecked<APlayerController>(c);
...
Run Code Online (Sandbox Code Playgroud)
在调试版本中,Cast如果它返回null ,它将使用并抛出一个断言; 在发布版本中,它可以快速解决static_cast.
| 归档时间: |
|
| 查看次数: |
4332 次 |
| 最近记录: |