summaryrefslogtreecommitdiffstats
path: root/include/godot_cpp/variant/variant.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/godot_cpp/variant/variant.hpp')
-rw-r--r--include/godot_cpp/variant/variant.hpp20
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;
}