@ -0,0 +1,50 @@
|
||||
#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);
|
||||
};
|
||||
Reference in New Issue
Block a user