26 #include "../concepts.h"
31 template <
typename Signature >
34 template <
typename ReturnType,
typename... ArgTypes >
47 : obj_( reinterpret_cast<
void* >( fun ) )
48 , handler_( &FunctionHandler )
52 template < std::invocable< ArgTypes... > Callable >
55 , handler_( &CallableHandler< Callable > )
61 return handler_( obj_, std::forward< ArgTypes >(
args )... );
65 template <
typename Callable >
66 static ReturnType CallableHandler(
void*
const ptr, ArgTypes...
args )
68 auto* cb_ptr =
reinterpret_cast< Callable*
>( ptr );
69 return ( *cb_ptr )( std::forward< ArgTypes >(
args )... );
72 static ReturnType FunctionHandler(
void*
const ptr, ArgTypes...
args )
74 auto f_ptr =
reinterpret_cast< signature*
>( ptr );
75 return f_ptr(
args... );
78 using handler = ReturnType(
void*, ArgTypes... );
function_view(function_view const &)=default
function_view(function_view &)=default
ReturnType(ArgTypes...) signature
Definition: function_view.h:38
ReturnType operator()(ArgTypes... args) const
Definition: function_view.h:59
function_view(Callable &cb)
Definition: function_view.h:53
function_view(function_view &&) noexcept=default
MIT License.
Definition: impl.h:31
Args const & args
Definition: min_max.h:83
Definition: function_view.h:32