瀏覽代碼

Merge pull request #5 from Azaezel/virtuals-override

Virtuals override
marauder2k7 1 年之前
父節點
當前提交
8805ca4f9d
共有 3 個文件被更改,包括 28 次插入7 次删除
  1. 0 6
      Engine/.clang-tidy
  2. 5 0
      Engine/lib/.clang-tidy
  3. 23 1
      Engine/source/console/engineObject.h

+ 0 - 6
Engine/.clang-tidy

@@ -1,6 +0,0 @@
----
-Checks:            '-*,modernize-use-override'
-WarningsAsErrors:  ''
-HeaderFilterRegex: '(source/).*'
-CheckOptions:
-  - { key: modernize-use-override.IgnoreDestructors,          value: true }

+ 5 - 0
Engine/lib/.clang-tidy

@@ -0,0 +1,5 @@
+---
+Checks:            '-*'
+WarningsAsErrors:  ''
+HeaderFilterRegex: '.*'
+FormatStyle:       'file'

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