Boost logo

Boost :

From: Arno Schödl (aschoedl_at_[hidden])
Date: 2008-08-29 09:13:34


I have seen your | operator. It is o.k. for unary things, like rng | filter( predicate ), but for binary things, it is a bit weird:

rngA | difference(rngB)

I find the alternatives clearer: rngA - rngB would be nice (but requires concept checking), or difference( rngA, rngB ).

But regardless of notation, doesn't this suffer from the same problem that these objects are temporaries?

Arno

-----Original Message-----
From: boost-bounces_at_[hidden] [mailto:boost-bounces_at_[hidden]] On Behalf Of Neil Groves
Sent: Friday, August 29, 2008 2:56 PM
To: boost_at_[hidden]
Subject: Re: [boost] lifetime of ranges vs. iterators

On Fri, Aug 29, 2008 at 1:50 PM, Arno Schödl <aschoedl_at_[hidden]>wrote:

> For iterators, the make_ helpers are great:
>
> vector<int> vecnA;
> vector<int> vecnB;
>
> DoSomethingWithRangeThatStoresIterators(
> make_difference_iterator( vecnA.begin(), vecnA,end(), vecnB.begin(),
> vecnB.end() ),
> make_difference_iterator( vecnA.end(), vecnA,end(), vecnB.end(),
> vecnB.end() )
> );
>
> The equivalent with ranges, supposedly easier, would now look like this:
>
> vector<int> vecnA;
> vector<int> vecnB;
>
> difference_range< int, int > diffrng( vecnA, vecnB ); // watch out with
> scope
> DoSomethingWithRangeThatStoresIterators( diffrng );
>
> as opposed to the much nicer:
>
> vector<int> vecnA;
> vector<int> vecnB;
>
> DoSomethingWithRangeThatStoresIterators( make_difference_iterator( vecnA,
> vecnB ) );
>
> If we drive this stacking to one or more levels, things pretty quickly
> become pretty ugly. Do we really want that?
>

No, we don't want that at all. Apologies for the shameless plug, but you
might want to look at the range adaptors that use the '|' operator in the
Boost.RangeEx proposal / update in the vault at:
http://www.boostpro.com/vault/index.php?action=downloadfile&filename=range_ex.zip&directory=Algorithms

The range adaptors and the pipe operator allow infix composition of range
adaptors for the very reason you suggest.

Neil Groves

>
> Arno
>
>
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

--
Dr. Arno Schoedl · aschoedl_at_[hidden] 
Technical Director 
 
think-cell Software GmbH · Invalidenstr. 34 · 10115 Berlin, Germany 
http://www.think-cell.com · phone +49-30-666473-10 · toll-free (US) +1-800-891-8091
Directors: Dr. Markus Hannebauer, Dr. Arno Schoedl · Amtsgericht Charlottenburg, HRB 85229

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