새소식

개발/UE4

[UE4] TMap과 Structure (GetTypeHash)

  • -

TMap은 Key/Value Pair로 이뤄져 있으며, GetHashType 함수를 통해 내부에 갖고 있는 Key 타입에 대한 리플렉션을 찾는다.

때문에,사용자가 임의로 만든 struct를 키 타입으로 명시하고 GetHashType을 override하지 않고 빌드를 수행하면, 컴파일 에러가 난다.

이럴 때 struct 안에 'friend uint32 GetTypeHash(const FMyClass& MyClass)' 를 선언하면 되는데, 여기서 주목해야 할 점은 'friend' 키워드를 사용했다는 점이다.

이 이유는 언리얼엔진은 리플렉션 계층을 따로 구현하고 있는데, 이 때문에 언리얼에서 명시하는 클래스는 모두 GetTypeHash를 갖고 있으며 이는 한정자에 상관없이 리플렉션 계층에서 접근할 수 있어야 하기 때문에, friend로 명시되어 있다. 
때문에 FMap이나 FSet 내부에서 키값의 GetTypeHash를 반환하는 내부 GetTypeHash가 존재해야 하며 해당 함수에서 한정자에 상관없이 접근하기 위해 또 struct 내부에 friend 키워드를 사용해야 하는 것 이다.

어쨋든 결론은 사용자 정의 class나 struct에 부모가 없는 상태로 TMap의 키 타입으로 사용하고 싶다면
GetTypeHash를 선언해야 한다는 것을 잊지 말자.

참고자료 : 
UE4 C++ 프로그래밍 입문 | 언리얼 엔진 문서 (unrealengine.com)

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.