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