101 lines
2.4 KiB
Plaintext
101 lines
2.4 KiB
Plaintext
|
|
[section:function_output Function Output Iterator]
|
|
|
|
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.
|
|
|
|
[h2 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*[])
|
|
{
|
|
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;
|
|
}
|
|
|
|
[h2 Reference]
|
|
|
|
[h3 Synopsis]
|
|
|
|
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*();
|
|
function_output_iterator& operator++();
|
|
function_output_iterator& operator++(int);
|
|
private:
|
|
UnaryFunction m_f; // exposition only
|
|
};
|
|
|
|
[h3 Requirements]
|
|
|
|
`UnaryFunction` must be Assignable and Copy Constructible.
|
|
|
|
[h3 Concepts]
|
|
|
|
`function_output_iterator` is a model of the Writable and
|
|
Incrementable Iterator concepts.
|
|
|
|
[h3 Operations]
|
|
|
|
explicit function_output_iterator(const UnaryFunction& f = UnaryFunction());
|
|
|
|
[*Effects: ] Constructs an instance of `function_output_iterator`
|
|
with `m_f` constructed from `f`.
|
|
|
|
unspecified_type 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`.
|
|
|
|
[endsect]
|