이미 C++ 에서의 CastRTTI에 대한 자료를 정리해 두었다.

UE4에서도 UObject를 동적으로 type-safe 하게 형변환하기 위한 Cast 함수가 존재한다. 업캐스팅과 다운캐스팅에서 문제가 있을 수 있어 그에대한 문제를 엔진에서 가장 알맞게 처리할 수 있도록 도와준다.

Cast.h 파일에 들어가보면 Cast는 저렇게 단 한줄로 구성되어있다. TCastImpl의 멤버함수 DoCast를 알아보기위해 더 들어가 보도록 하자.

TCastImpl 속에는 DoCast와 DoCastCheckedWithoutTypeCheck라는 인라인 함수가 존재한다. 아까 나온 DoCast의 경우 그저 nullptr 체크랑 RTTI 체크를 한 번 진행하고 (To*)Src 로 캐스팅해 넘겨줘버린다.

이것 외에도 ECastType에 따라 여러가지 상황에 대한 캐스트를 진행한다.

  • UObjectToUObject (오브젝트끼리)
  • InterfaceToUObject (인터페이스에서 UObject로)
  • UObjectToInterface (오브젝트에서 인터페이스로)
  • InterfaceToInterface (인터페이스끼리)

위와같이 4가지의 경우로 캐스팅을 진행한다. Enum은 Cast되지 않는다.

사용법

사용법은 아주 간단하다. 캐스팅하고싶은 타입으로 캐스팅하면된다.

class ATESTCharacter* testCharacter; //포인터 값이 있다고 가정
ACharacter* caster = Cast<ACharacter>(testCharacter); //Cast 진행