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);
 | |
| };
 |