언리얼 엔진/C++

언리얼엔진 C++ Enum to String(static template)

mane 2022. 7. 22. 14:26
728x90
반응형

문제점 

  • Enum을 String으로 바꿀 때마다 새로 함수를 작성하고 새로운 enum을 파라미터로 생성해야 하기 때문에 쓸 때마다 코드가 늘어난다.

해결

  • static template function을 만들어서 헤더만 추가하면 쓸 수 있도록 한다.

추가

  • typeid.name()을 하면 'enum EnumValue'으로 만들어지기 때문에 RemoveFromStart()를 이용하여 'enum '을 잘라준다.
  • enum은 BlueprintType 이여야 한다.

코드

template<typename T>
static FString GetEnumDisplayNameToString(T EnumValue)
{
   FString EnumString = FString::Printf(TEXT("%hs"),typeid(T).name());
   EnumString.RemoveFromStart(TEXT("enum "));
   const TCHAR* Name = *EnumString;
   const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE,Name,true);
   if (EnumPtr == nullptr)
   {
      return FString("Invalid");
   }
   return EnumPtr->GetDisplayNameTextByIndex(static_cast<int32>(EnumValue)).ToString();
}

사용법

const FString EnumString = *GetEnumDisplayNameToString(Enum);

 

728x90
반응형