51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | #pragma once
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * Thin wrapper around sizeof(T) used for getting the size of a function's arguments. | ||
|  |  * @tparam T The type we want the size of | ||
|  |  */ | ||
|  | template <typename T> | ||
|  | struct TArgSize | ||
|  | { | ||
|  | 	constexpr static size_t Size = sizeof(T); | ||
|  | }; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * Specialization for reference qualified types so we can get the size of the pointer instead of the object itself. | ||
|  |  * @tparam T The type we want the size of | ||
|  |  */ | ||
|  | template <typename T> | ||
|  | struct TArgSize<T&> | ||
|  | { | ||
|  | 	constexpr static size_t Size = sizeof(T*); | ||
|  | }; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * Constant expression for the size of an argument | ||
|  |  * @tparam T The type we want the size of | ||
|  |  */ | ||
|  | template <typename T> | ||
|  | constexpr size_t ArgSize = TArgSize<T>::Size; | ||
|  | 
 | ||
|  | template <typename ReturnType, typename... Args> | ||
|  | constexpr size_t GetFunctionSize(ReturnType (*)(Args...)) | ||
|  | { | ||
|  | 	if constexpr (std::is_void_v<ReturnType>) | ||
|  | 	{ | ||
|  | 		return (ArgSize<Args> + ... + 0); | ||
|  | 	} | ||
|  | 	else | ||
|  | 	{ | ||
|  | 		return ArgSize<ReturnType> + (ArgSize<Args> + ... + 0); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | struct UNREALSHARPBINDS_API FCSExportedFunction | ||
|  | { | ||
|  | 	FName Name; | ||
|  | 	void* FunctionPointer; | ||
|  | 	int32 Size; | ||
|  | 
 | ||
|  | 	FCSExportedFunction(const FName& OuterName, const FName& Name, void* InFunctionPointer, int32 InSize); | ||
|  | }; |