Просмотр исходного кода

fix inheritance conflict loop by declaring a singular root for `class EngineObject : public StrongRefBase`

AzaezelX 1 год назад
Родитель
Сommit
2e25059b27
1 измененных файлов с 23 добавлено и 1 удалено
  1. 23 1
      Engine/source/console/engineObject.h

+ 23 - 1
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;