소스 검색

Merge pull request #81117 from AThousandShips/object_register_fix_3_x

[3.x] Add check to ensure registered classes are declared
Rémi Verschelde 2 년 전
부모
커밋
5279566a1b
2개의 변경된 파일6개의 추가작업 그리고 0개의 파일을 삭제
  1. 3 0
      core/class_db.h
  2. 3 0
      core/object.h

+ 3 - 0
core/class_db.h

@@ -170,6 +170,7 @@ public:
 	template <class T>
 	static void register_class() {
 		GLOBAL_LOCK_FUNCTION;
+		static_assert(TypesAreSame<typename T::self_type, T>::value, "Class not declared properly, please use GDCLASS.");
 		T::initialize_class();
 		ClassInfo *t = classes.getptr(T::get_class_static());
 		ERR_FAIL_COND(!t);
@@ -182,6 +183,7 @@ public:
 	template <class T>
 	static void register_virtual_class() {
 		GLOBAL_LOCK_FUNCTION;
+		static_assert(TypesAreSame<typename T::self_type, T>::value, "Class not declared properly, please use GDCLASS.");
 		T::initialize_class();
 		ClassInfo *t = classes.getptr(T::get_class_static());
 		ERR_FAIL_COND(!t);
@@ -198,6 +200,7 @@ public:
 	template <class T>
 	static void register_custom_instance_class() {
 		GLOBAL_LOCK_FUNCTION;
+		static_assert(TypesAreSame<typename T::self_type, T>::value, "Class not declared properly, please use GDCLASS.");
 		T::initialize_class();
 		ClassInfo *t = classes.getptr(T::get_class_static());
 		ERR_FAIL_COND(!t);

+ 3 - 0
core/object.h

@@ -269,6 +269,7 @@ private:
 	friend class ClassDB;                                                                                                               \
                                                                                                                                         \
 public:                                                                                                                                 \
+	typedef m_class self_type;                                                                                                          \
 	virtual String get_class() const {                                                                                                  \
 		return String(#m_class);                                                                                                        \
 	}                                                                                                                                   \
@@ -407,6 +408,8 @@ class ObjectRC;
 
 class Object {
 public:
+	typedef Object self_type;
+
 	enum ConnectFlags {
 
 		CONNECT_DEFERRED = 1,