반응형
TSet의 KeyFuncs 사용하여 구조체 키를 사용는 방법을 알아 보겠습니다.
TSet의 Syntax이며 두 번째 파라미터가 KeyFuncs입니다.
template<typename InElementType, typename KeyFuncs, typename Allocator>
class TSet
먼저 간단한 구조체를 정의합니다.
USTRUCT()
struct FMyStruct
{
GENERATED_BODY()
FMyStruct() : Name(""), SomeFloat(0.f) {}
FMyStruct(FString name, float someFloat) : Name(name), SomeFloat(someFloat) {}
UPROPERTY()
FString Name;
UPROPERTY()
float SomeFloat;
};
BaseKeyFuncs를 부모로하는 FMyStuct를 위한 KeyFuncs를 구현합니다.
struct TMyStructSetKeyFuncs : BaseKeyFuncs<FMyStruct, FString>
{
private:
typedef BaseKeyFuncs<FMyStruct, FString> Super;
public:
typedef typename Super::ElementInitType ElementInitType;
typedef typename Super::KeyInitType KeyInitType;
static KeyInitType GetSetKey(ElementInitType Element)
{
return Element.Name;
}
static bool Matches(KeyInitType A, KeyInitType B)
{
return A.Compare(B, ESearchCase::CaseSensitive) == 0;
}
static uint32 GetKeyHash(KeyInitType Key)
{
return FCrc::StrCrc32(*Key);
}
};
이제 이를 사용하는 코드입니다.
TSet<FMyStruct, TMyStructSetKeyFuncs> setData
{
{FMyStruct("dev", 22.3f)},
{FMyStruct("jino", 11.2f)},
{FMyStruct("hello", 100.0f)}
};
FString key = "jino";
FMyStruct* found = setData.Find(key);
UE_LOG(LogTemp, Warning, TEXT("key:%s somefloat:%.1f"), *found->Name, found->SomeFloat);
출력 결과는 다음과 같습니다.
LogTemp: Warning: key:jino somefloat:11.2
이 구현의 특이점은 FMyStruct 값이 아니라 FString 값을 사용하여 TSet.Find를 수행 했다는 것입니다.
연관되어 함께 다음의 글들도 살펴보면 도움이 됩니다.
[게임 개발/Unreal Engine] - [UE4] TMap의 KeyFuncs 사용하여 구조체 키를 사용는 방법
[게임 개발/Unreal Engine] - [UE4] TMap, TSet의 Key 값으로서 구조체를 사용 방법
'게임 개발 > Unreal Engine' 카테고리의 다른 글
[UE5] Cannot open include file: 'CommonAnimationTypes.generated.h' 해결 (0) | 2022.03.13 |
---|---|
[UE5] FHitResult의 Actor 문제 해결 (0) | 2022.03.12 |
[UE4] TMap의 KeyFuncs 사용하여 구조체 키를 사용는 방법 (0) | 2022.02.21 |
[UE4] TMap, TSet의 Key 값으로서 구조체를 사용 방법 (0) | 2022.02.21 |
[UE4] Aimation Montage Play가 동작하지 않는 경우 해결 (0) | 2022.02.17 |