Added function_traits.
This commit is contained in:
parent
ba6ffa6c42
commit
93ef90aeb8
@ -253,6 +253,42 @@ struct optional_base<T, false>
|
|||||||
template<typename T, bool enable>
|
template<typename T, bool enable>
|
||||||
using optional_base_t = optional_base<T, enable>::type;
|
using optional_base_t = optional_base<T, enable>::type;
|
||||||
|
|
||||||
|
namespace impl
|
||||||
|
{
|
||||||
|
template<typename TFunc>
|
||||||
|
struct function_traits_base {};
|
||||||
|
|
||||||
|
template<typename TResult, typename... TParams>
|
||||||
|
struct function_traits_base<TResult (*)(TParams...)>
|
||||||
|
{
|
||||||
|
using result_t = TResult;
|
||||||
|
using params_t = std::tuple<TParams...>;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename TResult, typename TType, typename... TParams>
|
||||||
|
struct function_traits_base<TResult (TType::*)(TParams...)>
|
||||||
|
{
|
||||||
|
using result_t = TResult;
|
||||||
|
using params_t = std::tuple<TType*, TParams...>;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename TResult, typename TType, typename... TParams>
|
||||||
|
struct function_traits_base<TResult (TType::*)(TParams...) const>
|
||||||
|
{
|
||||||
|
using result_t = TResult;
|
||||||
|
using params_t = std::tuple<const TType*, TParams...>;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename TFunc>
|
||||||
|
struct function_traits : impl::function_traits_base<TFunc>
|
||||||
|
{
|
||||||
|
static constexpr std::size_t NUM_PARAMS = std::tuple_size_v<typename impl::function_traits_base<TFunc>::params_t>;
|
||||||
|
|
||||||
|
template<std::size_t pos>
|
||||||
|
using param_t = std::tuple_element_t<pos, typename impl::function_traits_base<TFunc>::params_t>;
|
||||||
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// public functions
|
// public functions
|
||||||
//
|
//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user