Unreal Engine/Unreal Engine

[Unreal Engine] 순수 가상 함수, PURE_VIRTUAL Macro

CodeHunst 2024. 5. 20. 22:02

일반적으로 C++ 에서는 순수 가상함수를

virtual void Foo() = 0;

와 같이 선언한다.

하지만 UClass에서 위와 같이 선언 시 오류가 발생한다.

 

언리얼에서 UObject는 추상화될 수 없다. (즉, 순수 가상함수를 선언할 수 없다.)

UE가 CDO(Class Default Object)를 생성하려면 모든 UObject가 생성 가능해야 하기 때문.

 

대신 PURE_VIRTUAL 매크로를 사용하여 유사한 동작을 얻을 수 있다.

// 추상클래스
UCLASS(Abstract)
class RPGPROJECT_API ACharacterBase : public ACharacter, public IHitInterface
{
	GENERATED_BODY()
protected:
	//순수 가상함수
	virtual void DestroyWeapon() PURE_VIRTUAL(ACharacterBase::DestroyWeapon,);
}

위처럼 선언 가능하다.

 

하지만!! 추상 클래스를 상속받은 자식 클래스에서 순수가상함수를 구현하지 않았음에도

컴파일 타임에 오류를 발견하지 못하고 런타임에 오류를 발견한다.

 

[참고]

https://forums.unrealengine.com/t/how-do-i-implement-pure-virtual-methods/280323

 

How do I implement Pure Virtual Methods?

Hi, I’m wondering why if writing pure virtual methods in my abstract base classes is supported? Currently I’ve got a class that inherits from actor and I’ve marked it as UCLASS(abstract) with a pure virtual method. I then have a class that inherits f

forums.unrealengine.com

https://velog.io/@woojoo0407/%EC%96%B8%EB%A6%AC%EC%96%BC-%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%88%9C%EC%88%98-%EA%B0%80%EC%83%81-%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9%EB%B2%95

 

언리얼 추상 클래스, 순수 가상 함수 사용법

하나 이상의 순수 가상 메소드(pure virtual method)를 포함하는 클래스기본 구현이 없는 가상(virtual) 함수.반드시 상속받은 자식 클래스에서 해당 순수 가상 함수를 재정의(override) 시켜줘야 한다.실

velog.io