C++ 检查A是否是B的子类?

C++ 检查A是否是B的子类?,c++,unreal-engine4,C++,Unreal Engine4,我目前正在使用虚幻引擎4,似乎我无法避免一些投射 AController* c = this->GetController(); APlayerController* p = (APlayerController*)c; 在我进行播放之前,有没有办法检查c是否是PlayerController?像许多游戏引擎一样,出于性能原因,不真实的引擎在编译时没有RTTI,因此动态播放将无法工作 虚幻引擎提供了自己的替代方案,简称为Cast。我现在找不到任何关于它的文档,但是很好地描述了它的使用 A

我目前正在使用虚幻引擎4,似乎我无法避免一些投射

AController* c = this->GetController();
APlayerController* p = (APlayerController*)c;

在我进行播放之前,有没有办法检查
c
是否是
PlayerController

像许多游戏引擎一样,出于性能原因,不真实的引擎在编译时没有RTTI,因此
动态播放
将无法工作

虚幻引擎提供了自己的替代方案,简称为
Cast
。我现在找不到任何关于它的文档,但是很好地描述了它的使用

AController* c = this->GetController();
APlayerController* p = Cast<APlayerController>(c);
if (p) {
    ...
}
如果您确定
c
始终是一个
APlayerController
,则
castcheed
更有效:

AController* c = this->GetController();
APlayerController* p = CastChecked<APlayerController>(c);
...
AController*c=this->GetController();
APlayerController*p=CastChecked(c);
...

在调试构建中,这将使用
Cast
并在返回null时抛出断言;在发布版本中,它会分解为快速的
静态\u转换

转换的工作方式是“试试看,成功了吗?”。正如Angews answer所说,一个
动态_cast
将是你最好的选择,然后检查
nullptr
AController* c = this->GetController();
APlayerController* p = CastChecked<APlayerController>(c);
...