Skip to content

Commit db24b25

Browse files
committed
Fix create instance func
1 parent b021245 commit db24b25

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

include/godot_cpp/core/class_db.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,19 +112,19 @@ class ClassDB {
112112
template <typename T, bool is_abstract>
113113
static void _register_class(bool p_virtual = false, bool p_exposed = true, bool p_runtime = false);
114114

115-
template <typename T>
115+
template <typename T, bool is_abstract>
116116
static GDExtensionObjectPtr _create_instance_func(void *data) {
117-
if constexpr (!std::is_abstract_v<T>) {
117+
if constexpr (!std::is_abstract_v<T> || !is_abstract) {
118118
T *new_object = memnew(T);
119119
return new_object->_owner;
120120
} else {
121121
return nullptr;
122122
}
123123
}
124124

125-
template <typename T>
125+
template <typename T, bool is_abstract>
126126
static GDExtensionClassInstancePtr _recreate_instance_func(void *data, GDExtensionObjectPtr obj) {
127-
if constexpr (!std::is_abstract_v<T>) {
127+
if constexpr (!std::is_abstract_v<T> || !is_abstract) {
128128
#ifdef HOT_RELOAD_ENABLED
129129
T *new_instance = (T *)memalloc(sizeof(T));
130130
Wrapped::RecreateInstance recreate_data = { new_instance, obj, Wrapped::recreate_instance };
@@ -235,9 +235,9 @@ void ClassDB::_register_class(bool p_virtual, bool p_exposed, bool p_runtime) {
235235
T::to_string_bind, // GDExtensionClassToString to_string_func;
236236
nullptr, // GDExtensionClassReference reference_func;
237237
nullptr, // GDExtensionClassUnreference unreference_func;
238-
&_create_instance_func<T>, // GDExtensionClassCreateInstance create_instance_func; /* this one is mandatory */
238+
&_create_instance_func<T, is_abstract>, // GDExtensionClassCreateInstance create_instance_func; /* this one is mandatory */
239239
T::free, // GDExtensionClassFreeInstance free_instance_func; /* this one is mandatory */
240-
&_recreate_instance_func<T>, // GDExtensionClassRecreateInstance recreate_instance_func;
240+
&_recreate_instance_func<T, is_abstract>, // GDExtensionClassRecreateInstance recreate_instance_func;
241241
&ClassDB::get_virtual_func, // GDExtensionClassGetVirtual get_virtual_func;
242242
nullptr, // GDExtensionClassGetVirtualCallData get_virtual_call_data_func;
243243
nullptr, // GDExtensionClassCallVirtualWithData call_virtual_func;

0 commit comments

Comments
 (0)