일반적으로 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
언리얼 추상 클래스, 순수 가상 함수 사용법
하나 이상의 순수 가상 메소드(pure virtual method)를 포함하는 클래스기본 구현이 없는 가상(virtual) 함수.반드시 상속받은 자식 클래스에서 해당 순수 가상 함수를 재정의(override) 시켜줘야 한다.실
velog.io
'Unreal Engine > Unreal Engine' 카테고리의 다른 글
| [Unreal Engine] TObjectPtr vs Raw Pointer (0) | 2024.06.10 |
|---|---|
| [Unreal Engine] 플레이어 로직을 Controller에? Pawn에? (0) | 2024.05.25 |
| [Unreal Engine] 언리얼 컨테이너 라이브러리 (UCL) (0) | 2024.02.25 |
| [Unreal Engine] 언리얼 오브젝트 (UObject) (0) | 2024.02.25 |
| [Unreal Engine] Documentation 모음 (0) | 2024.01.11 |