KoreanFoodie's Study
[언리얼] TTypeCompatibleBytes 타입 본문
TTypeCompatibleBytes 타입
핵심 :
1. TTypeCompatibleBytes 은 기본 타입이 아닌 데이터 배열로, 컴파일 타임 alignment 가 가능하다.
2. Alignment 가 되는 기본 단위는 템플릿 매개변수로 전달된 타입으로부터 계산된 사이즈로 정의된다.
3. GetTypedPtr 로 해당 Element 를 사용할 수 있다.
TypeCompatibleBytes.h 에 정의된 구현을 보면,
/** An untyped array of data with compile-time alignment and size derived from another type. */
template<typename ElementType>
struct TTypeCompatibleBytes :
public TAlignedBytes<
sizeof(ElementType),
alignof(ElementType)
>
{
ElementType* GetTypedPtr() { return (ElementType*)this; }
const ElementType* GetTypedPtr() const { return (const ElementType*)this; }
};
TAlignedBytes 는 다음과 같다 :
/**
* Used to declare an untyped array of data with compile-time alignment.
* It needs to use template specialization as the MS_ALIGN and GCC_ALIGN macros require literal parameters.
*/
template<int32 Size,uint32 Alignment>
struct TAlignedBytes; // this intentionally won't compile, we don't support the requested alignment
/** Unaligned storage. */
template<int32 Size>
struct TAlignedBytes<Size,1>
{
uint8 Pad[Size];
};
예제를 보고 마무리하자. 하지만 실제로 TTypeCompatibleBytes 의 멤버 함수를 쓸 일은 거의 없을 것이다. 엔진 소스를 보면, Delegate 타입을 검사하는데 GetTypedPtr 를 사용하고 있다.
TOptional<TTypeCompatibleBytes<FMpRewardCurrency>> currencyOptions;
auto element = currencyOptions.GetValue().GetTypedPtr();
또한 TOptional 에서 GetValue() 를 쓸 일도 거의 없다. '->' 가 내부적으로 GetValue() 를 호출하도록 오버로딩되어 있기 때문이다.
참고 : 언리얼 공식 문서
'Game Dev > Unreal C++ : Study' 카테고리의 다른 글
언리얼 렌더링 최적화 : Visibility 와 오클루전 컬링(Occlusion Culling) (1) | 2023.03.29 |
---|---|
언리얼 스마트 포인터(Unreal Smart Pointer) 정리 2 : 구현 세부사항과 팁 (0) | 2023.03.22 |
[언리얼] TOptional 사용하기 + 예제 (0) | 2023.03.21 |
[언리얼] 언리얼의 Cast 동작 원리 (2) | 2023.01.13 |
[언리얼] 위젯 리플렉터 - 언리얼 위젯 디버깅 (0) | 2022.11.16 |
Comments