| 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; |
|---|