文章

UE PURE_VIRTUAL

UE PURE_VIRTUAL

纯虚函数关键字 - PURE_VIRTUAL

  • UClass 在 C++ 意义上不能真正是抽象的
    • 因为 UObject 要求每个类都可以实例化(它至少创建每个类的一个实例,作为类默认对象 [$ Class Default Object $-CDO] 用于持久化默认的属性
  • 因此,每个类方法都必须有一个实现,即使它什么也不做。

但是,

可以通过使用 PURE_VIRTUAL 宏装饰内联方法实现来获得类似的行为。

因此,即使该方法 不是 C++ 意义上的纯虚方法 - 它有一个(可能是空的)函数体 - 编译器仍然可以确保所有子类确实提供实际的实现

PURE_VIRTUAL 的宏实现

1
#define PURE_VIRTUAL(func,extra) { LowLevelFatalError(TEXT("Pure virtual not implemented (%s)"), TEXT(#func)); extra }
  • 第一个参数是用于 记录目的的函数名称

  • 第二个参数用于 添加额外的代码。这可能是空的,但仍然需要在括号之间添加逗号

  • 必须是 CPP 意义上的完整函数

代码

1
2
3
virtual void Halo() PURE_VIRTUAL(MyClass::Halo, );

virtual bool IsValid() PURE_VIRTUAL(MyClass::IsValid, return false;);
本文由作者按照 CC BY 4.0 进行授权