@@ -112,19 +112,19 @@ class ClassDB {
112
112
template <typename T, bool is_abstract>
113
113
static void _register_class (bool p_virtual = false , bool p_exposed = true , bool p_runtime = false );
114
114
115
- template <typename T>
115
+ template <typename T, bool is_abstract >
116
116
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 ) {
118
118
T *new_object = memnew (T);
119
119
return new_object->_owner ;
120
120
} else {
121
121
return nullptr ;
122
122
}
123
123
}
124
124
125
- template <typename T>
125
+ template <typename T, bool is_abstract >
126
126
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 ) {
128
128
#ifdef HOT_RELOAD_ENABLED
129
129
T *new_instance = (T *)memalloc (sizeof (T));
130
130
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) {
235
235
T::to_string_bind, // GDExtensionClassToString to_string_func;
236
236
nullptr , // GDExtensionClassReference reference_func;
237
237
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 */
239
239
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;
241
241
&ClassDB::get_virtual_func, // GDExtensionClassGetVirtual get_virtual_func;
242
242
nullptr , // GDExtensionClassGetVirtualCallData get_virtual_call_data_func;
243
243
nullptr , // GDExtensionClassCallVirtualWithData call_virtual_func;
0 commit comments