1. 서론
탬플릿 함수를 사용할 때 typename을 T로 설정할때 T에 모든 타입이 올 수 있지만 특정 타입으로 제한하고 싶은 경우가 있다. 오버로드를 사용하여 원하는 타입만 지정하는 방법도 있지만 이렇게 하지 않고 컴파일 단계에서 원하는 타입이 맞는지 확인해보자.
2. 코드 예제
template<class T>
T* GetOwningPawn() const
{
static_assert(TPointerIsConvertibleFromTo<T, APawn>::Value, "'T' Template Parameter get GetPawn must be derived from APawn");
return CastChecked<T>(GetOwner());
}
Pawn을 리턴하는 탬플릿함수이다. 이때 Pawn은 꼭 APanw이 아니라 Character 등 APawn에서 유래하는 클래스들만 반환을 하고 싶다.
3. 구문 설명
static_assert: 해당 함수는 C++ 11부터 지원하는 문법으로 조건식을 확인하여 false가 나오면 컴파일 에러를 발생시킨다.
TPointerIsConvertibleFromTo<T*, U*>::Value: TPointerIsConvertibleFromTo는 언리얼 엔진에서 제공해주는 문법으로 T*가 U*로 변환될 수 있는지 확인하는 문법이다. Value는 boolean 값으로 컴파일 단계에서 확인 가능한 상수이다.
이 문법을 사용하면 템플릿 함수를 사용할때 런타임에서 에러가 발생하는 것을 상당부분 예방할 수 있을 것이다.
'게임프로그래밍 > 언리얼엔진' 카테고리의 다른 글
[Unreal Engine 5] 블랜드 스페이스를 위한 방향 float 얻는 법 (0) | 2025.03.24 |
---|---|
[Unreal 5] 커스텀 인풋 컴포넌트 클래스 사용하기 (0) | 2025.03.18 |
[Unreal 5] C++에서 게임플레이 태그 생성하고 사용하기 (0) | 2025.03.18 |
[Unreal] TObjectPtr과 TSubclassOf의 차이 (0) | 2025.03.10 |