1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2024-11-08 08:47:17 +01:00

Update sqratTypes.h

Add a utility wrapper for member functions with raw bindings.
This commit is contained in:
Sandu Liviu Catalin 2019-08-19 22:28:47 +03:00
parent f97bf22673
commit f32a7f59f0

View File

@ -1519,6 +1519,25 @@ struct ArgFwd<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14> {
}
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Used to wrap calling a static member function as a raw function by providing the actual instance before the VM.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
template < class T, SQInteger (*Fn)(T &, HSQUIRRELVM) > inline SQInteger SqRawMemberFnWrap(HSQUIRRELVM vm)
{
// The wrapped instance
T * inst = nullptr;
// Attempt to extract the argument values
try
{
inst = Var< T * >(vm, 1).value;
}
catch (const Sqrat::Exception & e)
{
return sq_throwerror(vm, e.what());
}
// Forward the call (assume the instance is valid!)
return Fn(*inst, vm);
}
}