Jeff Flinn
On 7/31/15 8:40 AM, dariomt wrote:
Edward Diener
writes: On 7/30/2015 7:06 AM, dariomt <at> gmail.com wrote:
Here is my problem: for any given algorithm that writes its output
into
an output iterator, I'd like to apply a transformation *before* writing to the output iterator.
e.g. inside the algorithm the output iterator is dereferenced and incremented to write each result, typically like this:
*output++ = ith_result;
I'd like to wrap the output iterator with a unary function func
such
that the effect is equivalent to:
*output++ = func( ith_result );
I'm looking at the adaptors in Boost.Iterator but I cannot find a suitable one.
Am I missing anything? Is there a better approach?
Can you not use the function_output_iterator to accomplish what you want to do ?
IIUC the function_output_iterator "fakes" an output iterator with a function object that gets called for each element written to the iterator.
I need to wrap *both* an actual output iterator and a function object, and I need to apply the function *before* writing to the actual output iterator.
Given that the output iterator is written by dereference and assignment, I think I would need some kind of proxy reference, that when assigned to applies the function before doing the actual assignment.
That looks ugly, so I'm asking here for a more elegant solution :)
how is what you want to do different from:
boost::copy( myrange | transformed(func), outputitr );
Jeff
What if myrange is the output of an algorithm, but I don't want to copy
it into an intermediate range?
e.g.
template