diff --git a/Engine/source/console/engineObject.h b/Engine/source/console/engineObject.h index 83297d09f..64cd9c1bc 100644 --- a/Engine/source/console/engineObject.h +++ b/Engine/source/console/engineObject.h @@ -282,6 +282,28 @@ class EngineObject; template< typename T > friend struct ::_SCOPE; \ template< typename T > friend T* _CREATE(); \ template< typename T, typename Base > friend class ::EngineClassTypeInfo; \ + private: \ + typedef ::_Private::_AbstractClassBase< ThisType > _ClassBase; \ + static EngineClassTypeInfo< ThisType, _ClassBase > _smTypeInfo; \ + static EngineExportScope& __engineExportScope(); \ + static EnginePropertyTable& _smPropertyTable; \ + const EngineTypeInfo* __typeinfo() const override; \ + public: + +/// Declare an abstract base class @a type derived from the class @a super. +/// +/// Nearly identical to DECLARE_ABSTRACT_CLASS macro, but with virtual methods +/// that are suppose to be override'd in child classes. +/// +/// @see DECLARE_ABSTRACT_CLASS +#define DECLARE_ABSTRACT_BASE_CLASS(type) \ + public: \ + typedef type ThisType; \ + typedef void SuperType; \ + template< typename T > friend struct ::_EngineTypeTraits; \ + template< typename T > friend struct ::_SCOPE; \ + template< typename T > friend T* _CREATE(); \ + template< typename T, typename Base > friend class ::EngineClassTypeInfo; \ private: \ typedef ::_Private::_AbstractClassBase< ThisType > _ClassBase; \ static EngineClassTypeInfo< ThisType, _ClassBase > _smTypeInfo; \ @@ -504,7 +526,7 @@ class EngineObject : public StrongRefBase { public: - DECLARE_ABSTRACT_CLASS( EngineObject, void ); + DECLARE_ABSTRACT_BASE_CLASS( EngineObject ); DECLARE_INSCOPE( _GLOBALSCOPE ); DECLARE_INSTANTIABLE;