Boost logo

Boost Users :

Subject: Re: [Boost-users] [Range] Adaptors
From: Robert Jones (robertgbjones_at_[hidden])
Date: 2011-01-06 08:23:11


On Wed, Jan 5, 2011 at 5:13 PM, Dave Abrahams <dave_at_[hidden]> wrote:

> At Wed, 5 Jan 2011 16:05:56 +0000,
> Robert Jones wrote:
> >
> > I might be asking for the impossible here, but given the lovely adaptor
> > syntax, eg
> >
> > std::vector<int> vec;
> > boost::copy( vec | boost::adaptors::reversed
> > | boost::adaptors::uniqued,
> > std::ostream_iterator<int>(std::cout) );
> >
> >
> > I notice it still uses the function call notation in the outermost
> > operation( boost::copy() ),
> > can it be written to eliminate function call syntax completely, say
> > something like
> >
> > vec | boost::adaptors::reversed | boost::adaptors::uniqued |
> > boost::adaptors::copy( std::ostream_iterator<int>(std::cout) );
> >
> > or even
> >
> > vec | boost::adaptors::reversed | boost::adaptors::uniqued |
> > std::ostream_iterator<int>(std::cout);
>
> It could be done, but it might not make much sense. The boost
> adaptors are essentially lazy sequence transformations, but the copy
> operation you're asking for has a completely different nature: it's
> eager. If you still like that syntax, though, you could write a
> suitable copy function of your own in about 40 lines that would do the
> same job.
>

Yes.... I take your point about eager vs lazy, but on reflection is it not
the case that almost any 'pipeline' of transformations has to end with
'eager' consumption?

If I had

int f( int );

boost::for_each( vec | boost::adaptors::reversed | boost::adaptors::uniqued,
f );

and instead were able to write it as

vec | boost::adaptors::reversed | boost::adaptors::uniqued | f;

the final use of operator|() seems to pretty much imply eagerness in the
same way that the for_each() does.

I'm not sure that it would be possible to implement it unambiguously tho'.

- Rob.



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