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 코드가 추가되는 구조였다.