summaryrefslogtreecommitdiffstats
path: root/include/godot_cpp/core/binder_common.hpp
diff options
context:
space:
mode:
authorFabio Alessandrelli <fabio.alessandrelli@gmail.com>2023-01-10 14:28:26 +0100
committerGitHub <noreply@github.com>2023-01-10 14:28:26 +0100
commit8ee9cab8f87dc1c09fe1f85eb632dac46a395c72 (patch)
tree549c1461e7d19c97e3531b3708ff6090cd167d8c /include/godot_cpp/core/binder_common.hpp
parent129c358a72ff7baad0ca1e03ddaad96564de239a (diff)
parent9fd33b5cdedd214f6defc89049f520770e164260 (diff)
downloadredot-cpp-8ee9cab8f87dc1c09fe1f85eb632dac46a395c72.tar.gz
Merge pull request #989 from Faless/ext/4.x_objects_bind
Allow method binds to take Object subclasses as arguments
Diffstat (limited to 'include/godot_cpp/core/binder_common.hpp')
-rw-r--r--include/godot_cpp/core/binder_common.hpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/include/godot_cpp/core/binder_common.hpp b/include/godot_cpp/core/binder_common.hpp
index 642c5ba..207d3c1 100644
--- a/include/godot_cpp/core/binder_common.hpp
+++ b/include/godot_cpp/core/binder_common.hpp
@@ -86,21 +86,36 @@ namespace godot {
template <class T>
struct VariantCaster {
static _FORCE_INLINE_ T cast(const Variant &p_variant) {
- return p_variant;
+ using TStripped = std::remove_pointer_t<T>;
+ if constexpr (std::is_base_of<Object, TStripped>::value) {
+ return Object::cast_to<TStripped>(p_variant);
+ } else {
+ return p_variant;
+ }
}
};
template <class T>
struct VariantCaster<T &> {
static _FORCE_INLINE_ T cast(const Variant &p_variant) {
- return p_variant;
+ using TStripped = std::remove_pointer_t<T>;
+ if constexpr (std::is_base_of<Object, TStripped>::value) {
+ return Object::cast_to<TStripped>(p_variant);
+ } else {
+ return p_variant;
+ }
}
};
template <class T>
struct VariantCaster<const T &> {
static _FORCE_INLINE_ T cast(const Variant &p_variant) {
- return p_variant;
+ using TStripped = std::remove_pointer_t<T>;
+ if constexpr (std::is_base_of<Object, TStripped>::value) {
+ return Object::cast_to<TStripped>(p_variant);
+ } else {
+ return p_variant;
+ }
}
};