Boost.Function Reference Manual

Header <boost/function.hpp> synopsis

Here MAX_ARGS is an implementation-defined constant that defines the maximum number of function arguments supported by Boost.Function and will be at least 10. The MAX_ARGS constant referred to in this document need not have any direct representation in the library.

namespace boost {
  class function_base
  {
    typedef implementation-defined safe_bool;
    bool empty() const;
    operator safe_bool() const;
    safe_bool operator!() const;
  };

  // For N in [0, MAX_ARGS]
  template<typename Signature,
           typename Arg1,
	   typename Arg2,
           ...
           typename ArgN,
	   typename Policy    = empty_function_policy, // Deprecated
	   typename Mixin     = empty_function_mixin, // Deprecated
	   typename Allocator = std::allocator<function_base> >
  class functionN : public function_base, public Mixin
  {
    typedef ResultType result_type; // [1]
    typedef Policy     policy_type; // Deprecated
    typedef Mixin      mixin_type; // Deprecated
    typedef Allocator  allocator_type;

    typedef Arg1 argument_type;        // If N == 1

    typedef Arg1 first_argument_type;  // If N == 2
    typedef Arg2 second_argument_type; // If N == 2

    // Construction
    explicit functionN(const Mixin& = Mixin());
    functionN(const functionN&);
    template<typename F> functionN(F, const Mixin& = Mixin());
    template<typename F> functionN(reference_wrapper<F>);
    
    // Assignment
    functionN& operator=(const functionN&);
    template<typename F> functionN& operator=(F);
    template<typename F> functionN& operator=(reference_wrapper<F>);
    void set(const functionN&); // Deprecated
    template<typename F> void set(F); // Deprecated
    void swap(functionN&);
    void clear();

    // Invocation
    result_type operator()(Arg1 a1, Arg2 a2, ..., ArgN aN) const;
  };

  template<typename ResultType,
           typename Arg1,
	   typename Arg2,
           ...
	   typename ArgN,
           typename Policy, // Deprecated
           typename Mixin, // Deprecated
           typename Allocator>
  void swap(functionN<ResultType, Arg1, Arg2, ..., ArgN, Policy, Mixin, Allocator>&,
            functionN<ResultType, Arg1, Arg2, ..., ArgN, Policy, Mixin, Allocator>&);

  // For any N in [0, MAX_ARGS]
  template<typename Signature, // Function type: ResultType (Arg1, Arg2, ..., ArgN)
	   typename Policy    = empty_function_policy, // Deprecated
	   typename Mixin     = empty_function_mixin, // Deprecated
	   typename Allocator = std::allocator<function_base> >
  class function : public functionN<ResultType, Arg1, Arg2, ..., ArgN>
  {
    // Construction
    function();
    function(const function&);
    function(const functionN<ResultType, Arg1, Arg2, ..., ArgN>&);
    template<typename F> functionN(F);
    
    // Assignment
    function& operator=(const function&);
    function& operator=(const functionN<ResultType, Arg1, Arg2, ..., ArgN>&);
    template<typename F> function& operator=(F);
    void set(const function&); // Deprecated
    void set(const functionN<ResultType, Arg1, Arg2, ..., ArgN>&); // Deprecated
    template<typename F> void set(F); // Deprecated
  };

  template<typename Signature, typename Policy, typename Mixin, typename Allocator>
  void swap(function<Signature, Policy, Mixin, Allocator>&,
            function<Signature, Policy, Mixin, Allocator>&);
}	   

Definitions

Class function_base

Class function_base is the common base class for all Boost.Function objects. Objects of type function_base may not be created directly.

bool empty() const

operator safe_bool() const

safe_bool operator!() const

Class template functionN

Class template functionN is actually a family of related classes function0, function1, etc., up to some implementation-defined maximum. In this context, N refers to the number of parameters and f refers to the implicit object parameter.

explicit functionN(const Mixin& = Mixin());

functionN(const functionN& g);

template<typename F> functionN(F g, const Mixin& = Mixin());

template<typename F> functionN(reference_wrapper<F> g);

functionN& operator=(const functionN& g);

template<typename F> functionN& operator=(F g);

template<typename F> functionN& operator=(reference_wrapper<F> g);

void set(const functionN& g);

template<typename F> void set(F g);

void swap(functionN& g);

void clear();

result_type operator()(Arg1 a1, Arg2 a2, ..., ArgN aN) const;

Class template function

Class template function is a thin wrapper around the numbered class templates function0, function1, etc. It accepts up to MAX_ARGS arguments, but when passed N arguments it will derive from functionN specialized with the arguments it receives.

The semantics of all operations in class template function are equivalent to that of the underlying functionN object, although additional member functions are required to allow proper copy construction and copy assignment of function objects.

Operations

template<typename ResultType,
         typename Arg1,
	 typename Arg2,
         ...
	 typename ArgN,
         typename Policy, // Deprecated
         typename Mixin, // Deprecated
         typename Allocator>
void swap(functionN<ResultType, Arg1, Arg2, ..., ArgN, Policy, Mixin, Allocator>& f,
          functionN<ResultType, Arg1, Arg2, ..., ArgN, Policy, Mixin, Allocator>& g);

template<typename Signature, typename Policy, typename Mixin, typename Allocator>
void swap(function<Signature, Policy, Mixin, Allocator>& f,
          function<Signature, Policy, Mixin, Allocator>& g);

[1] On compilers not supporting void returns, when the ReturnType is void, the result_type of a Boost.Function object is implementation-defined.


Douglas Gregor
Last modified: Fri Jul 19 16:40:00 EDT 2002