Author: | David Abrahams, Jeremy Siek, Thomas Witt |
---|---|
Contact: | dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de |
Organization: | Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction |
Date: | 2003-08-05 |
Copyright: | Copyright Dave Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved |
abstract: |
---|
The function output iterator adaptor makes it easier to create custom output iterators. The adaptor takes a unary function and creates a model of Output Iterator. Each item assigned to the output iterator is passed as an argument to the unary function. The motivation for this iterator is that creating a conforming output iterator is non-trivial, particularly because the proper implementation usually requires a proxy object.
template <class UnaryFunction> class function_output_iterator { public: typedef iterator_tag< writable_iterator_tag , incrementable_traversal_tag > iterator_category; typedef void value_type; typedef void difference_type; typedef void pointer; typedef void reference; explicit function_output_iterator(const UnaryFunction& f = UnaryFunction()); struct output_proxy { output_proxy(UnaryFunction& f); template <class T> output_proxy& operator=(const T& value); }; output_proxy operator*(); function_output_iterator& operator++(); function_output_iterator& operator++(int); };
The UnaryFunction must be Assignable, Copy Constructible, and the expression f(x) must be valid, where f is an object of type UnaryFunction and x is an object of a type accepted by f. The resulting function_output_iterator is a model of the Writable and Incrementable Iterator concepts.
explicit function_output_iterator(const UnaryFunction& f = UnaryFunction());
Returns: | An instance of function_output_iterator with f stored as a data member. |
---|
output_proxy operator*();
Returns: | An instance of output_proxy constructed with a copy of the unary function f. |
---|
function_output_iterator& operator++();
Returns: | *this |
---|
function_output_iterator& operator++(int);
Returns: | *this |
---|
output_proxy(UnaryFunction& f);
Returns: | An instance of output_proxy with f stored as a data member. |
---|
template <class T> output_proxy& operator=(const T& value);
Effects: | m_f(value); return *this; |
---|