Boost logo

Boost Users :

Subject: Re: [Boost-users] [fusion] transform & iterators
From: David Greene (greened_at_[hidden])
Date: 2010-03-10 16:57:27


On Thursday 11 March 2010 01:50:14 Joel de Guzman wrote:
> On 3/11/2010 12:11 PM, David A. Greene wrote:
> > For the first attached testcase, can anyone explain why "Doesn't"
> > doesn't?
>
> Because fusion::transform is purely functional --takes its arguments
> as const and returns a transformed view and returns a view which is
> also const (immutable). In that regard, fusion is more like MPL
> (functional) than STL (imperative).

Ok, but if push_back takes an argument by const reference, what's the
problem? Is bind() messing things up by creating a function object that
expects a non-const reference? push_back isn't altering the sequence
in any way so immutability shouldn't be a problem.

> > I would not expect the second test to compile. But is there some way to
> > bridge the gap between fusion iterators, boost.Range ranges and standard
> > iterators? Is there any way to turn a fusion iterator into a standard-
> > conforming iterator?
>
> There's no way I know that would allow that. First, fusion iterators
> have different types for each iterator position, unlike STL where
> begin and end and everything in between have a single iterator type.
> IOTW, fusion iterators are polymorphic.

Ugh. That makes things difficult then. There's no simple way to define
a function that just takes a pair of iterators and does something with
them. Surely others have tried to do things like this before. What's
the typical solution?

                                               -Dave


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