UCLASS(Within=PlayerController, config=Input, transient)
class ENGINE_API UPlayerInput : public UObject
{
GENERATED_BODY()


UCLASS 에 Within 이라는 키워드가 있다. 이 클래스를 생성, 보유할 수 있는 클래스를 제한하는 지정자다.

void UPlayerInput::FlushPressedKeys()
{
APlayerController* PlayerController = GetOuterAPlayerController();


GetOuterAPlayerController() 함수 구현이 궁금해서 헤더 파일을 다 뒤져봤지만 찾을 수가 없어서 차이점을 검색해보다 발견하게 되었다.

DECLARE_WITHIN(APlayerController)

Within 지정자를 사용하면 자동생성되는 코드에 위와 같은 매크로가 추가된다.

#define DECLARE_WITHIN_INTERNAL( TWithinClass, bCanUseOnCDO ) \
/** The required type of this object's outer ({{ typedef-type }}) */ \
typedef class TWithinClass WithinClass;  \
TWithinClass* GetOuter##TWithinClass() const { return (ensure(bCanUseOnCDO || !HasAnyFlags(RF_ClassDefaultObject)) ? (TWithinClass*)GetOuter() : nullptr); }


#define DECLARE_WITHIN( TWithinClass ) \
DECLARE_WITHIN_INTERNAL( TWithinClass, false )

위와 같은 매크로로 GetOuterAPlayerController 코드가 추가되는 구조였다.

참고 : [UE4]  클래스 및 UCLASS 주요 지정자

728x90

+ Recent posts