Index
#include <x/functional.H> int method(const x::function<int(const char *)> &func) { return func("Hello world"); } auto closure=x::make_function<int(const char *)>([] (const char *arg) { return strlen(arg); }) int n=method(closure);
This is a mechanism for implementing function objects
for type-erasing lambdas which uses
virtual inheritance instead of heap allocation, like
std::function
.
x::function<return_type(Args...)>
is a function object that implements an operator()
that takes Args...
parameters and returns a
return_type
, like
std::function
.
x::make_function<return_type(Args...)>
()
takes a functor parameter, and returns a subclass of
x::function<return_type(Args...)>
that implements the operator()
by invoking
the functor.
The two main ways to use x::function
are:
Call x::make_function<return_type(Args...)>
()
and pass its return value to a function that takes a
const x::function<return_type(Args...)> &
parameter.
Call x::make_function<return_type(Args...)>
()
and store its return value in an auto
variable, that's subsequently passed as a
const x::function<return_type(Args...)> &
function parameter.
x::functionref
and
x::functionptr
provide a reference-counted wrapper for
an
x::function<return_type(Args...)>
.
This implements very similar semantics as
std::function
,
but with all the reference-counted goodies:
#include <x/functionalrefptr.H> int method(const x::function<int(const char *)> &func) { return func("Hello world"); } // ... x::functionref<int(const char *)> auto closure=[] (const char *arg) { return strlen(arg); }; x::function<int(const char *)> &fr = *f; return method(fr) + f("!"); }
x::functionref
inherits from a reference to an
obj that also inherits from an
x::function
.