Fix Object::cast_to<T>() for custom classes (reverted) #1037
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #995 and godotengine/godot#71332
I tried a bunch of different variations on this, including using
p_object->is_class(class_name)to check if the object was the right type, AND making changes in the Godot engine itself ingdextension_object_cast_to()(which would break the GDExtension ABI, but Remi actually said that would be fine while GDExtension is experimental :-)).However, assuming there isn't some case where this won't work that I didn't think of, I like the version in this PR the best so far!
It's switching to
dynamic_cast<T>at the end, which means C++ will check if the final class matches the requested type using RTTI. This should be much faster thanp_object->is_class(class_name)(since that relies on walking up the inheritance chain and comparing strings).Anyway, it's working in my testing with SG Physics 2D!