summaryrefslogtreecommitdiffstats
path: root/include/core
diff options
context:
space:
mode:
authorraymoo <raymoo@users.noreply.github.com>2019-06-10 17:24:16 -0500
committerRaymoo <uguu@installgentoo.com>2020-06-10 22:09:05 -0500
commit6f8d3d2c2a11ad840b13f4191b9dc52c5cf16bda (patch)
treeb3f5d507310f46320ce755d5b69e9214ccb5e26f /include/core
parent2bb3a7e19c4fd84117b409d061d336b70b8db4ca (diff)
downloadredot-cpp-6f8d3d2c2a11ad840b13f4191b9dc52c5cf16bda.tar.gz
Allow registering base class methods for derived classes
Adds register_class_method, a variant of register_method where the user can specify a derived class to register the method for.
Diffstat (limited to 'include/core')
-rw-r--r--include/core/Godot.hpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/include/core/Godot.hpp b/include/core/Godot.hpp
index c196da2..ddf1e3e 100644
--- a/include/core/Godot.hpp
+++ b/include/core/Godot.hpp
@@ -305,6 +305,13 @@ void register_method(const char *name, M method_ptr, godot_method_rpc_mode rpc_t
godot::nativescript_api->godot_nativescript_register_method(godot::_RegisterState::nativescript_handle, ___get_method_class_name(method_ptr), name, attr, method);
}
+// User can specify a derived class D to register the method for, instead of it being inferred.
+template <class D, class B, class R, class... As>
+void register_method_explicit(const char *name, R (B::*method_ptr)(As...), godot_method_rpc_mode rpc_type = GODOT_METHOD_RPC_MODE_DISABLED) {
+ static_assert(std::is_base_of<B, D>::value, "Explicit class must derive from method class");
+ register_method(name, static_cast<R (D::*)(As...)>(method_ptr), rpc_type);
+}
+
template <class T, class P>
struct _PropertySetFunc {
void (T::*f)(P);