mirror of
				https://github.com/VCMP-SqMod/SqMod.git
				synced 2025-11-04 00:07:19 +01:00 
			
		
		
		
	Update sqratTypes.h
Add a utility wrapper for member functions with raw bindings.
This commit is contained in:
		@@ -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);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user