Boost logo

Boost :

From: Maxim Yegorushkin (e-maxim_at_[hidden])
Date: 2004-02-03 13:24:20


Neal D. Becker wrote:

> I ran into the following problem. I have an algorithm which looks like:
>
> template<typename in_t, typename out_t>
> void Alg (in_t in, in_t inend, out_t out) {
> for (; in != inend; in++, out++)
> do_something()
> }
>
> Now if I want to call this algorithm more than once, it would be convenient
> to pass out by ref, so it would be incremented:
>
> Alg (v.begin(), v.end(), boost::ref (out))
> that is, pass a reference to some kind of output iterator
>
> this fails, because boost::ref doesn't have operator++ defined for
> reference_wrapper.
>
> My question is, should boost::ref forward operators like ++ so that this
> would work?

To make it work you can use the 'unwrap' function template just like it is in "boost/bind.hpp" and "boost/mpl/aux_/unwrap.hpp". You algorithm would look like this:

template<typename in_t, typename out_t>
void Alg (in_t in, in_t inend, out_t out) {
    for (; in != inend; in++, unwrap(out)++)
      do_something()
}

-- 
Maxim Yegorushkin
MetaCommunications Engineering
http://www.meta-comm.com/engineering/

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk