浏览代码

Simplified `ObjectDB::get_instance()` casting

Reduces boiler plate by templating `get_instance()` for the cast type, while remaining backward compatible to the existing functionality.
lawnjelly 8 月之前
父节点
当前提交
31935d6d63
共有 2 个文件被更改,包括 7 次插入0 次删除
  1. 1 0
      core/object.cpp
  2. 6 0
      core/object.h

+ 1 - 0
core/object.cpp

@@ -2036,6 +2036,7 @@ void ObjectDB::remove_instance(Object *p_object) {
 
 
 	rw_lock.write_unlock();
 	rw_lock.write_unlock();
 }
 }
+
 Object *ObjectDB::get_instance(ObjectID p_instance_id) {
 Object *ObjectDB::get_instance(ObjectID p_instance_id) {
 	rw_lock.read_lock();
 	rw_lock.read_lock();
 	Object **obj = instances.getptr(p_instance_id);
 	Object **obj = instances.getptr(p_instance_id);

+ 6 - 0
core/object.h

@@ -798,6 +798,12 @@ public:
 	typedef void (*DebugFunc)(Object *p_obj);
 	typedef void (*DebugFunc)(Object *p_obj);
 
 
 	static Object *get_instance(ObjectID p_instance_id);
 	static Object *get_instance(ObjectID p_instance_id);
+
+	template <class T>
+	static T *get_instance(ObjectID p_instance_id) {
+		return Object::cast_to<T>(get_instance(p_instance_id));
+	}
+
 	static void debug_objects(DebugFunc p_func);
 	static void debug_objects(DebugFunc p_func);
 	static int get_object_count();
 	static int get_object_count();