#ifndef METHOD_BIND_H
#define METHOD_BIND_H
#include "core/variant/binder_common.h"
VARIANT_BITFIELD_CAST(MethodFlags)
class MethodBind { … };
template <typename Derived, typename T, typename R, bool should_returns>
class MethodBindVarArgBase : public MethodBind { … };
template <typename T>
class MethodBindVarArgT : public MethodBindVarArgBase<MethodBindVarArgT<T>, T, void, false> { … };
template <typename T>
MethodBind *create_vararg_method_bind(void (T::*p_method)(const Variant **, int, Callable::CallError &), const MethodInfo &p_info, bool p_return_nil_is_variant) { … }
template <typename T, typename R>
class MethodBindVarArgTR : public MethodBindVarArgBase<MethodBindVarArgTR<T, R>, T, R, true> { … };
template <typename T, typename R>
MethodBind *create_vararg_method_bind(R (T::*p_method)(const Variant **, int, Callable::CallError &), const MethodInfo &p_info, bool p_return_nil_is_variant) { … }
#ifndef TYPED_METHOD_BIND
class __UnexistingClass;
#define MB_T …
#else
#define MB_T …
#endif
#ifdef TYPED_METHOD_BIND
template <typename T, typename... P>
#else
template <typename... P>
#endif
class MethodBindT : public MethodBind { … };
template <typename T, typename... P>
MethodBind *create_method_bind(void (T::*p_method)(P...)) { … }
#ifdef TYPED_METHOD_BIND
template <typename T, typename... P>
#else
template <typename... P>
#endif
class MethodBindTC : public MethodBind { … };
template <typename T, typename... P>
MethodBind *create_method_bind(void (T::*p_method)(P...) const) { … }
#ifdef TYPED_METHOD_BIND
template <typename T, typename R, typename... P>
#else
template <typename R, typename... P>
#endif
class MethodBindTR : public MethodBind { … };
template <typename T, typename R, typename... P>
MethodBind *create_method_bind(R (T::*p_method)(P...)) { … }
#ifdef TYPED_METHOD_BIND
template <typename T, typename R, typename... P>
#else
template <typename R, typename... P>
#endif
class MethodBindTRC : public MethodBind { … };
template <typename T, typename R, typename... P>
MethodBind *create_method_bind(R (T::*p_method)(P...) const) { … }
template <typename... P>
class MethodBindTS : public MethodBind { … };
template <typename... P>
MethodBind *create_static_method_bind(void (*p_method)(P...)) { … }
template <typename R, typename... P>
class MethodBindTRS : public MethodBind { … };
template <typename R, typename... P>
MethodBind *create_static_method_bind(R (*p_method)(P...)) { … }
#endif