0% found this document useful (0 votes)
17 views

Function Output Iterator

The document describes a function output iterator adaptor that makes it easier to create custom output iterators by taking a unary function and creating a model of Output Iterator. Each item assigned to the output iterator is passed as an argument to the unary function. The document provides the header, requirements, models, operations, and an example of using the function output iterator.

Uploaded by

wilker2
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views

Function Output Iterator

The document describes a function output iterator adaptor that makes it easier to create custom output iterators by taking a unary function and creating a model of Output Iterator. Each item assigned to the output iterator is passed as an argument to the unary function. The document provides the header, requirements, models, operations, and an example of using the function output iterator.

Uploaded by

wilker2
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Function Output Iterator

Author: David Abrahams, Jeremy Siek, Thomas Witt


Contact: [email protected], [email protected], [email protected]
Organization: Boost Consulting, Indiana University Open Systems Lab, University of
Hanover Institute for Transport Railway Operation and Construction
Date: 2004-11-01
Copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.

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 Itera-
tor. 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.

Table of Contents
Header
function_output_iterator requirements
function_output_iterator models
function_output_iterator operations
Example

Header
#include <boost/function_output_iterator.hpp>

template <class UnaryFunction>


class function_output_iterator {
public:
typedef std::output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;

explicit function_output_iterator();

explicit function_output_iterator(const UnaryFunction& f);

/* see below */ operator*();

1
function_output_iterator& operator++();
function_output_iterator& operator++(int);
private:
UnaryFunction m_f; // exposition only
};

function_output_iterator requirements
UnaryFunction must be Assignable and Copy Constructible.

function_output_iterator models
function_output_iterator is a model of the Writable and Incrementable Iterator concepts.

function_output_iterator operations
explicit function_output_iterator(const UnaryFunction& f = UnaryFunction());
Effects: Constructs an instance of function_output_iterator with m_f constructed from
f.
operator*();
Returns: An object r of unspecified type such that r = t is equivalent to m_f(t) for all
t.
function_output_iterator& operator++();
Returns: *this
function_output_iterator& operator++(int);
Returns: *this

Example
struct string_appender
{
string_appender(std::string& s)
: m_str(&s)
{}

void operator()(const std::string& x) const


{
*m_str += x;
}

std::string* m_str;
};

int main(int, char*[])


{

2
std::vector<std::string> x;
x.push_back("hello");
x.push_back(" ");
x.push_back("world");
x.push_back("!");

std::string s = "";
std::copy(x.begin(), x.end(),
boost::make_function_output_iterator(string_appender(s)));

std::cout << s << std::endl;

return 0;
}

You might also like