From 2e25059b27d6bef49dbbb7893b2338033b5a2ac3 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Mon, 18 Mar 2024 22:39:18 -0500 Subject: [PATCH] fix inheritance conflict loop by declaring a singular root for `class EngineObject : public StrongRefBase` --- Engine/source/console/engineObject.h | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) 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;