Unreal : Type Traits

1 분 소요

알아두면 좋을 Unreal c++ Template Type Traits

1. TEnableIf

  • template의 Trait이 Enable한지 체크하는데 사용한다.

예시

// T가 UObject가 같은 타입인지 체크한다.
template<typename T, TEnableIf<TIsSame<T, UObject>::Value>::Type>

2. TAnd, TOr, TNot

  • template type Trait의 조건을 TEnableIf를 사용하여 여러 조건을 설정하는데 사용한다.
//TAnd
template<typename T, TEnableIf
<
  TAnd
  <
    TIsSame<T, UObject>,
    TIsSame<T, UUserWidget>
  >::Value
>::Type

// TOr
template<typename T, TEnableIf
<
  TOr
  <
    TIsSame<T, UObject>,
    TIsSame<T, UUserWidget>
  >::Value
>::Type

// TNot
template<typename T, TEnableIf
<
  TNot<TIsSame<T, UObject>>::Value
>::Type

3. TIsDerivedFrom

  • template<typename DerivedType, typename BaseType>에서 DerivedType이 BaseType을 상속받는지 체크한다.

예시

//case 1 : with static_assert
template<typename T>
void Func(T* InObject)
{
  static_asset(TIsDerivedFrom<T, UObject>::IsDerived, "comment");
}

//case 2 : with template
template<typename T, typename = typename TEnableIf<TIsDerivedFrom<T, UObject>::IsDerivedType>::Type>
void Func(T* InObject)
{}

4. TIsSame

  • template<typename A, typename B>에서 A와 B가 같은 타입인지 체크한다.

예시

template<typename T, typename = typename TEnableIf<TIsSame<T, UObject>::Value>::Type>
void Func(T* InObject)
{}

5. TPointerIsConvertibleFromTo

  • template<typename From, typename To>에서 From 포인터를 To 포인터로 변환할 수 있는지 체크한다.

예시

template<typename T, typename = typename TEnableIf<TPointerIsConvertibleFromTo<T, UObject>::Value>::Type>
void Func(T* InObject)
{}

이외에도 많은 Trait이 존재한다.

TIsEnum, TIsArray, TIsPointer, TIsFunction…

template선언시 작성하지 않고 코드내에서 if문과 같은 조건식으로도 활용할 수 있다.

예시

template<typename T>
void Func(T* InParam)
{
  if(TIsDerivedFrom<T, AActor>::IsDerivedType)
  {
    // T is Actor!
  }
}

태그:

카테고리:

업데이트: