Skip to content

Commit 6579a55

Browse files
committed
Fix variant call compiler error
1 parent a8d8485 commit 6579a55

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

include/godot_cpp/variant/variant.hpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838

3939
#include <gdextension_interface.h>
4040

41+
#include <algorithm>
4142
#include <array>
4243

4344
namespace godot {
@@ -255,25 +256,33 @@ class Variant {
255256
bool operator!=(const Variant &other) const;
256257
bool operator<(const Variant &other) const;
257258

258-
void call(const StringName &method, const Variant **args, int argcount, Variant &r_ret, GDExtensionCallError &r_error);
259+
void callp(const StringName &method, const Variant **args, int argcount, Variant &r_ret, GDExtensionCallError &r_error);
259260

260261
template <class... Args>
261262
Variant call(const StringName &method, Args... args) {
263+
std::array<Variant, sizeof...(args)> vargs = { args... };
264+
std::array<const Variant *, sizeof...(args)> argptrs;
265+
std::transform(vargs.begin(), vargs.end(), argptrs.begin(), [](Variant &arg) -> Variant * {
266+
return &arg;
267+
});
262268
Variant result;
263269
GDExtensionCallError error;
264-
std::array<GDExtensionConstVariantPtr, sizeof...(Args)> call_args = { Variant(args)... };
265-
call(method, call_args.data(), call_args.size(), result, error);
270+
callp(method, argptrs.data(), argptrs.size(), result, error);
266271
return result;
267272
}
268273

269-
static void call_static(Variant::Type type, const StringName &method, const Variant **args, int argcount, Variant &r_ret, GDExtensionCallError &r_error);
274+
static void callp_static(Variant::Type type, const StringName &method, const Variant **args, int argcount, Variant &r_ret, GDExtensionCallError &r_error);
270275

271276
template <class... Args>
272277
static Variant call_static(Variant::Type type, const StringName &method, Args... args) {
278+
std::array<Variant, sizeof...(args)> vargs = { args... };
279+
std::array<const Variant *, sizeof...(args)> argptrs;
280+
std::transform(vargs.begin(), vargs.end(), argptrs.begin(), [](Variant &arg) -> Variant * {
281+
return &arg;
282+
});
273283
Variant result;
274284
GDExtensionCallError error;
275-
std::array<GDExtensionConstVariantPtr, sizeof...(Args)> call_args = { Variant(args)... };
276-
call_static(type, method, call_args.data(), call_args.size(), result, error);
285+
callp_static(type, method, argptrs.data(), argptrs.size(), sizeof...(args), result, error);
277286
return result;
278287
}
279288

src/variant/variant.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -548,11 +548,11 @@ bool Variant::operator<(const Variant &other) const {
548548
return result.operator bool();
549549
}
550550

551-
void Variant::call(const StringName &method, const Variant **args, int argcount, Variant &r_ret, GDExtensionCallError &r_error) {
551+
void Variant::callp(const StringName &method, const Variant **args, int argcount, Variant &r_ret, GDExtensionCallError &r_error) {
552552
internal::gde_interface->variant_call(_native_ptr(), method._native_ptr(), reinterpret_cast<GDExtensionConstVariantPtr *>(args), argcount, r_ret._native_ptr(), &r_error);
553553
}
554554

555-
void Variant::call_static(Variant::Type type, const StringName &method, const Variant **args, int argcount, Variant &r_ret, GDExtensionCallError &r_error) {
555+
void Variant::callp_static(Variant::Type type, const StringName &method, const Variant **args, int argcount, Variant &r_ret, GDExtensionCallError &r_error) {
556556
internal::gde_interface->variant_call_static(static_cast<GDExtensionVariantType>(type), method._native_ptr(), reinterpret_cast<GDExtensionConstVariantPtr *>(args), argcount, r_ret._native_ptr(), &r_error);
557557
}
558558

0 commit comments

Comments
 (0)