Wie viele Spielengines wird Unreal Engine aus Leistungsgründen ohne RTTI kompiliert, so dass dynamic_cast
nicht funktioniert.
Unreal Engine bietet eine eigene Alternative, einfach Cast
genannt. Ich kann keine Dokumentation dafür finden, aber this question beschreibt seine Verwendung schön.
AController* c = this->GetController();
APlayerController* p = Cast<APlayerController>(c);
if (p) {
...
}
AController
hat auch eine bequeme Methode CastToPlayerController
, die das gleiche tun wird:
AController* c = this->GetController();
APlayerController* p = c->CastToPlayerController();
if (p) {
...
}
Wenn Sie sicher sind, dass c
immer ein APlayerController
sein wird dann CastChecked
effizienter ist:
AController* c = this->GetController();
APlayerController* p = CastChecked<APlayerController>(c);
...
Bei Debug-Builds wird Cast
verwendet und eine Bestätigung ausgelöst, wenn dies der Fall ist d gibt null zurück; in Release-Builds wird es zu einem schnellen static_cast
aufgelöst.
Die Art und Weise wie Casts arbeiten ist "Versuch es, hat es funktioniert?". Wie die Answers antworten, wäre ein "dynamic_cast" die beste Wahl, gefolgt von einem "nullptr". – OMGtechy