Boost logo

Boost Users :

Subject: Re: [Boost-users] [Boost.Iterator] transform_iterator equivalent for output iterators
From: dariomt (dariomt_at_[hidden])
Date: 2015-07-31 08:40:29


Edward Diener <eldiener <at> tropicsoft.com> 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 :)


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net