diff --git a/doc/reference.html b/doc/reference.html index f96bcf1..ba804bf 100644 --- a/doc/reference.html +++ b/doc/reference.html @@ -46,10 +46,12 @@ explicit functionN(const Mixin& = Mixin()); functionN(const functionN&); template<typename F> functionN(const F&, const Mixin& = Mixin()); + template<typename F> functionN(reference_wrapper<F>); // Assignment functionN& operator=(const functionN&); template<typename F> functionN& operator=(const F&); + template<typename F> functionN& operator=(reference_wrapper<F>); void set(const functionN&); template<typename F> void set(const F&); void swap(functionN&); @@ -126,16 +128,6 @@
A special provision is made for pointers to member functions. Though they are not function objects, Boost.Function will adapt them internally to function objects. This requires that a pointer to member function of the form R (X::*mf)(Arg1, Arg2, ..., ArgN) cv-quals
be adapted to a function object with the following function call operator overloads:
- R operator()(cv-quals X& x, Arg1 arg1, Arg2 arg2, ..., ArgN argN) const - { - return x.*mf(arg1, arg2, ..., argN); - } - - R operator()(cv-quals X* x, Arg1 arg1, Arg2 arg2, ..., ArgN argN) const - { - return x->*mf(arg1, arg2, ..., argN); - } - template<typename P> R operator()(cv-quals P& x, Arg1 arg1, Arg2 arg2, ..., ArgN argN) const { @@ -190,6 +182,14 @@
g
is a reference-to-const
because it is a portable, efficient, and concise way to accept any function object or function pointer. In the case of a function pointer, the type of g
is reference-to-const
pointer-to-function. template<typename F> functionN(reference_wrapper<F> g);
+
g.get()
is a compatible function object.Mixin
subobject from the given mixin.this
object targets g
(not a copy of g.get()
) if g.get()
is nonempty, or this->empty()
if g.get()
is empty. functionN& operator=(const functionN& g);
f
targets a copy of g
's target, if it has one, or is empty if g.empty()
. The mixin for f
is assigned the value of the mixin for g
.g
is a reference-to-const
because it is a portable, efficient, and concise way to accept any function object or function pointer. In the case of a function pointer, the type of g
is reference-to-const
pointer-to-function. template<typename F> functionN& operator=(reference_wrapper<F> g);
+
g.get()
is a compatible function object.f
targets g.get()
(not a copy of g.get()
) if g.get()
is nonempty, or f.empty()
if g.get()
is empty.*this
.this
throws.*this = g
. In some cases it is expensive (or semantically incorrect) to have
+Boost.Function clone a function object. In such cases, it is possible
+to request that Boost.Function keep only a reference to the actual
+function object. This is done using the ref
and cref
functions to wrap a
+reference to a function object:
+
+
+ stateful_type a_function_object; + boost::function<int, int> f; + f = ref(a_function_object); + + boost::function<int, int> f2(f); ++ +Here,
f
will not make a copy of
+a_function_object
, nor will f2
when it is
+targeted to f
's reference to
+a_function_object
. Additionally, when using references to
+function objects, Boost.Function will not throw exceptions during assignment.
+
function
family The header <boost/function.hpp> defines the primary entry point to the function object wrappers, the class template boost::function
. This class template is essentially a thin wrapper around a set of similar numbered function object wrappers, boost::function0
, boost::function1
, etc., where the number indicates the number of arguments passed to the function object target. The declaration of f
above could also be written as: