diff options
author | David Snopek <dsnopek@gmail.com> | 2023-09-21 15:07:05 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-21 15:07:05 -0500 |
commit | 4314f91b7dc23d930506f52d3a3c88fae0f5d57d (patch) | |
tree | 82888e3779b6198e395b59b2f31a715aa536bc6e /include/godot_cpp | |
parent | db15731e4d2af5510a9c9310c7fd71813d1dd9c7 (diff) | |
parent | ca3e25de040c87de1a9bb332c62cfaef0d44fe75 (diff) | |
download | redot-cpp-4314f91b7dc23d930506f52d3a3c88fae0f5d57d.tar.gz |
Merge pull request #1238 from dsnopek/variant-call-callp
Fix variant call compiler error (alternate)
Diffstat (limited to 'include/godot_cpp')
-rw-r--r-- | include/godot_cpp/variant/variant.hpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/include/godot_cpp/variant/variant.hpp b/include/godot_cpp/variant/variant.hpp index 3b5ca56..3e8738c 100644 --- a/include/godot_cpp/variant/variant.hpp +++ b/include/godot_cpp/variant/variant.hpp @@ -255,25 +255,33 @@ public: bool operator!=(const Variant &other) const; bool operator<(const Variant &other) const; - void call(const StringName &method, const Variant **args, int argcount, Variant &r_ret, GDExtensionCallError &r_error); + void callp(const StringName &method, const Variant **args, int argcount, Variant &r_ret, GDExtensionCallError &r_error); template <class... Args> Variant call(const StringName &method, Args... args) { + std::array<Variant, sizeof...(args)> vargs = { args... }; + std::array<const Variant *, sizeof...(args)> argptrs; + for (size_t i = 0; i < vargs.size(); i++) { + argptrs[i] = &vargs[i]; + } Variant result; GDExtensionCallError error; - std::array<GDExtensionConstVariantPtr, sizeof...(Args)> call_args = { Variant(args)... }; - call(method, call_args.data(), call_args.size(), result, error); + callp(method, argptrs.data(), argptrs.size(), result, error); return result; } - static void call_static(Variant::Type type, const StringName &method, const Variant **args, int argcount, Variant &r_ret, GDExtensionCallError &r_error); + static void callp_static(Variant::Type type, const StringName &method, const Variant **args, int argcount, Variant &r_ret, GDExtensionCallError &r_error); template <class... Args> static Variant call_static(Variant::Type type, const StringName &method, Args... args) { + std::array<Variant, sizeof...(args)> vargs = { args... }; + std::array<const Variant *, sizeof...(args)> argptrs; + for (size_t i = 0; i < vargs.size(); i++) { + argptrs[i] = &vargs[i]; + } Variant result; GDExtensionCallError error; - std::array<GDExtensionConstVariantPtr, sizeof...(Args)> call_args = { Variant(args)... }; - call_static(type, method, call_args.data(), call_args.size(), result, error); + callp_static(type, method, argptrs.data(), argptrs.size(), sizeof...(args), result, error); return result; } |