From ca46ef4d256c727a116366334b705ecda0a06c5d Mon Sep 17 00:00:00 2001 From: David Snopek Date: Wed, 24 Apr 2024 14:26:06 -0500 Subject: Give compile-time error if registering a class without its own `_bind_methods()` function --- include/godot_cpp/core/class_db.hpp | 1 + include/godot_cpp/core/type_info.hpp | 10 ++++++++++ 2 files changed, 11 insertions(+) (limited to 'include/godot_cpp/core') diff --git a/include/godot_cpp/core/class_db.hpp b/include/godot_cpp/core/class_db.hpp index 6dedc12..98e9f72 100644 --- a/include/godot_cpp/core/class_db.hpp +++ b/include/godot_cpp/core/class_db.hpp @@ -203,6 +203,7 @@ public: template void ClassDB::_register_class(bool p_virtual, bool p_exposed, bool p_runtime) { static_assert(TypesAreSame::value, "Class not declared properly, please use GDCLASS."); + static_assert(!FunctionsAreSame::value, "Class must declare 'static void _bind_methods'."); static_assert(!std::is_abstract_v || is_abstract, "Class is abstract, please use GDREGISTER_ABSTRACT_CLASS."); instance_binding_callbacks[T::get_class_static()] = &T::_gde_binding_callbacks; diff --git a/include/godot_cpp/core/type_info.hpp b/include/godot_cpp/core/type_info.hpp index 5896651..096e0ec 100644 --- a/include/godot_cpp/core/type_info.hpp +++ b/include/godot_cpp/core/type_info.hpp @@ -58,6 +58,16 @@ struct TypesAreSame { static bool const value = true; }; +template +struct FunctionsAreSame { + static bool const value = false; +}; + +template +struct FunctionsAreSame { + static bool const value = true; +}; + template struct TypeInherits { static D *get_d(); -- cgit v1.2.3