std::string foobar; std::string foobaz; std::string fooba="fooba"; auto iter=std::copy(fooba.begin(), fooba.end(), x::make_outputrefiterator<char> (std::back_insert_iterator<std::string>(foobar), std::back_insert_iterator<std::string>(foobaz))); auto tuple_iter=iter.get(); std::back_insert_iterator<std::string> a=std::get<0>(tuple_iter->iters); std::back_insert_iterator<std::string> b=std::get<1>(tuple_iter->iters); *a++='r'; *b++='z';
x::make_outputrefiterator<
()
takes a variadic list iterator over an output sequence of
type
>type
and instantiates a
subclass of
x::outputrefiteratorObj<
returning a type
>x::outputrefiterator
to the
subclass.
The
x::outputrefiteratorObj<
subclass implements
type
>operator=
(type
)
by iterating each iterator that was passed
to
x::make_outputrefiterator
() over the
value type
.
In effect, this splits the output sequence into multiple output sequences,
one for each output iterator.
The above example sets foobar
to
“foobar” and foobaz
to
“foobaz”.
Two std::back_insert_iterator
s get constructed
and passed to x::make_outputrefiterator
(), that
makes an output iterator to which the “fooba” part gets
copied to.
The reference-counted output iterator's get
()
returns a
reference to the underlying
reference-counted object.
Its iters
member is a std::tuple
containing the iterators that were passed to
x::make_outputrefiterator
().
The above example std::get
()s the
std::back_insert_iterator
s, then uses them
to add the final character to each string.
Using
x::make_outputrefiterator
() with one output
iterator parameter is a convenient way to turn a large output
iterator into a reference-counted object.