gpt4 book ai didi

c++ - 检查A是否是B的子类?

转载 作者:可可西里 更新时间:2023-11-01 18:25:31 25 4
gpt4 key购买 nike

我目前正在使用 Unreal Engine 4,似乎我无法避免一些转换。

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

有没有一种方法可以在执行转换之前检查 c 是否是 PlayerController

最佳答案

与许多游戏引擎一样,出于性能原因,虚幻引擎在没有 RTTI 的情况下进行编译,因此 dynamic_cast 将不起作用。

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

AController* c = this->GetController();
APlayerController* p = Cast<APlayerController>(c);
if (p) {
...
}

AController 还有一个方便的方法 CastToPlayerController这将做同样的事情:

AController* c = this->GetController();
APlayerController* p = c->CastToPlayerController();
if (p) {
...
}

如果您确定 c 始终是 APlayerController,那么 CastChecked 会更高效:

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

在调试版本中,这将使用 Cast 并在它返回 null 时抛出一个断言;在发布版本中,它解析为快速 static_cast

关于c++ - 检查A是否是B的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22609736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com