31 template <
typename MemberFunctionPtr >
34 template <
typename ReturnType,
typename Object,
typename... ArgTypes >
38 using object = Object;
41 template <
typename Signature >
44 template < auto MemberFunctionPtr >
49 using object =
typename traits::object;
59 template <
typename ReturnType,
typename... ArgTypes >
72 : obj_( reinterpret_cast<
void* >( fun ) )
73 , handler_( &function_handler )
77 template < std::invocable< ArgTypes... > Callable >
80 , handler_( &callable_handler< Callable > )
84 template < auto MemberFunctionPtr >
87 , handler_( &member_function_handler<
95 return handler_( obj_, (ArgTypes&&) (
args )... );
99 template <
typename Callable >
100 static ReturnType callable_handler(
void*
const ptr, ArgTypes...
args )
102 auto* cb_ptr =
reinterpret_cast< Callable*
>( ptr );
103 return ( *cb_ptr )( (ArgTypes&&) (
args )... );
106 static ReturnType function_handler(
void*
const ptr, ArgTypes...
args )
108 auto f_ptr =
reinterpret_cast< signature*
>( ptr );
109 return f_ptr(
args... );
112 template < auto MemberFunction,
typename Object >
113 static ReturnType member_function_handler(
void*
const ptr, ArgTypes...
args )
115 auto* obj_ptr =
reinterpret_cast< Object*
>( ptr );
116 return ( obj_ptr->*MemberFunction )( (ArgTypes&&) (
args )... );
119 using handler = ReturnType(
void*, ArgTypes... );
125 template < auto MemberFunctionPtr >
function_view(function_view const &)=default
function_view(function_view &)=default
function_view(member_function< MemberFunctionPtr > handle)
Definition: function_view.h:85
ReturnType(ArgTypes...) signature
Definition: function_view.h:63
ReturnType operator()(ArgTypes... args) const
Definition: function_view.h:93
function_view(Callable &cb)
Definition: function_view.h:78
function_view(function_view &&) noexcept=default
MIT License.
Definition: impl.h:31
ReturnType(ArgTypes...) signature
Definition: function_view.h:37
Args const & args
Definition: min_max.h:83
function_view(member_function< MemberFunctionPtr > handle) -> function_view< typename member_function< MemberFunctionPtr >::signature >
Definition: function_view.h:42
Definition: function_view.h:32
Definition: function_view.h:46
typename traits::signature signature
Definition: function_view.h:48
member_function(object &object)
Definition: function_view.h:51
typename traits::object object
Definition: function_view.h:49
object & obj
Definition: function_view.h:56