Home | Libraries | People | FAQ | More |
boost::function — A generalized function pointer that can be used for callbacks or wrapping function objects.
template<typename Signature, // Function type R (T1, T2, ..., TN) typename Allocator = std::allocator<void> > class function : public functionN<R, T1, T2, ..., TN, Allocator> { public: // types typedef R result_type; typedef Allocator allocator_type; typedef T1 argument_type; // If N == 1 typedef T1 first_argument_type; // If N == 2 typedef T2 second_argument_type; // If N == 2 typedef T1 arg1_type; typedef T2 arg2_type; . . . typedef TN argN_type; // static constants static const int arity = N; // Lambda library support template<typename Args> struct sig { // types typedef result_type type; }; // construct/copy/destruct function(); function(const functionN&); function(const function&); template<typename F> function(F); function& operator=(const functionN&); function& operator=(const function&); ~function(); // modifiers void swap(const function&); void clear(); // capacity bool empty() const; operator safe_bool() const; bool operator!() const; // target access template<typename Functor> Functor* target(); template<typename Functor> const Functor* target() const; template<typename Functor> bool contains(const Functor&) const; // invocation result_type operator()(arg1_type, arg2_type, ..., argN_type) const; }; // specialized algorithms template<typename Signature, typename Allocator> void swap(function<Signature, Allocator>&, function<Signature, Allocator>&); // comparison operators template<typename Signature, typename Allocator, typename Functor> bool operator==(const function<Signature, Allocator>&, Functor); template<typename Signature, typename Allocator, typename Functor> bool operator==(Functor, const function<Signature, Allocator>&); template<typename Signature, typename Allocator, typename Functor> bool operator==(const function<Signature, Allocator>&, reference_wrapper<Functor>); template<typename Signature, typename Allocator, typename Functor> bool operator==(reference_wrapper<Functor>, const function<Signature, Allocator>&); template<typename Signature1, typename Allocator1, typename Signature2, typename Allocator2> void operator==(const function<Signature1, Allocator1>&, const function<Signature2, Allocator2>&); template<typename Signature, typename Allocator, typename Functor> bool operator!=(const function<Signature, Allocator>&, Functor); template<typename Signature, typename Allocator, typename Functor> bool operator!=(Functor, const function<Signature, Allocator>&); template<typename Signature, typename Allocator, typename Functor> bool operator!=(const function<Signature, Allocator>&, reference_wrapper<Functor>); template<typename Signature, typename Allocator, typename Functor> bool operator!=(reference_wrapper<Functor>, const function<Signature, Allocator>&); template<typename Signature1, typename Allocator1, typename Signature2, typename Allocator2> void operator!=(const function<Signature1, Allocator1>&, const function<Signature2, Allocator2>&);
Class template function is a thin wrapper around the numbered class templates function0, function1, etc. It accepts a function type with N arguments and will will derive from functionN instantiated 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.
function();
Postconditions:
this->empty()
Throws:
Will not throw.
function(const functionN& f);
Postconditions:
Contains a copy of the f's target, if it has one, or is empty if f.empty().
Throws:
Will not throw unless copying the target of f throws.
function(const function& f);
Postconditions:
Contains a copy of the f's target, if it has one, or is empty if f.empty().
Throws:
Will not throw unless copying the target of f throws.
template<typename F> function(F f);
Requires:
F is a function object Callable from this.
Postconditions:
*this targets a copy of f if f is nonempty, or this->empty() if f is empty.
Throws:
Will not throw when f is a stateless function object.
function& operator=(const functionN& f);
Postconditions:
*this targets a copy of f's target, if it has one, or is empty if f.empty()
Throws:
Will not throw when the target of f is a stateless function object or a reference to the function object.
function& operator=(const function& f);
Postconditions:
*this targets a copy of f's target, if it has one, or is empty if f.empty()
Throws:
Will not throw when the target of f is a stateless function object or a reference to the function object.
~function();
Effects: If !this->empty(), destroys the target of this.
bool empty() const;
Returns:
false if this has a target, and true otherwise.
Throws:
Will not throw.
operator safe_bool() const;
Returns:
A safe_bool that evaluates false in a boolean context when this->empty(), and true otherwise.
Throws:
Will not throw.
bool operator!() const;
Returns:
this->empty()
Throws:
Will not throw.
template<typename Functor> Functor* target(); template<typename Functor> const Functor* target() const;
Returns:
If this stores a target of type
Functor, returns the address of the
target. Otherwise, returns the NULL
pointer.
Throws:
Will not throw.
template<typename Functor> bool contains(const Functor& f) const;
Returns: true if this->target<Functor>() is non-NULL and function_equal(*(this->target<Functor>()), f)
result_type operator()(arg1_type a1, arg2_type a2, ... , argN_type aN) const;
Effects:
f(a1, a2, ..., aN), where f is the target of *this.
Returns:
if R is void, nothing is returned; otherwise, the return value of the call to f is returned.
Throws:
bad_function_call if !this->empty(). Otherwise, may through any exception thrown by the target function f.
template<typename Signature, typename Allocator, typename Functor> bool operator==(const function<Signature, Allocator>& f, Functor g); template<typename Signature, typename Allocator, typename Functor> bool operator==(Functor g, const function<Signature, Allocator>& f); template<typename Signature, typename Allocator, typename Functor> bool operator==(const function<Signature, Allocator>& f, reference_wrapper<Functor> g); template<typename Signature, typename Allocator, typename Functor> bool operator==(reference_wrapper<Functor> g, const function<Signature, Allocator>& f); template<typename Signature1, typename Allocator1, typename Signature2, typename Allocator2> void operator==(const function<Signature1, Allocator1>& f1, const function<Signature2, Allocator2>& f2);
Returns: True when f stores an object of type Functor and one of the following conditions applies:
template<typename Signature, typename Allocator, typename Functor> bool operator!=(const function<Signature, Allocator>& f, Functor g); template<typename Signature, typename Allocator, typename Functor> bool operator!=(Functor g, const function<Signature, Allocator>& f); template<typename Signature, typename Allocator, typename Functor> bool operator!=(const function<Signature, Allocator>& f, reference_wrapper<Functor> g); template<typename Signature, typename Allocator, typename Functor> bool operator!=(reference_wrapper<Functor> g, const function<Signature, Allocator>& f); template<typename Signature1, typename Allocator1, typename Signature2, typename Allocator2> void operator!=(const function<Signature1, Allocator1>& f1, const function<Signature2, Allocator2>& f2);
Returns: True when f does not store an object of type Functor or it stores an object of type Functor and one of the following conditions applies:
Copyright © 2001-2004 Douglas Gregor |