Boost logo

Boost Users :

Subject: Re: [Boost-users] [lambda] Does Boost.Lambda support local variables?
From: Robert Jones (robertgbjones_at_[hidden])
Date: 2009-01-13 08:12:25


On Tue, Jan 13, 2009 at 12:54 PM, Peter Dimov <pdimov_at_[hidden]> wrote:

> Robert Jones:
>
> If not, are there some 'standard' techniques to produce a similar effect?
>>
>
> You can achieve something similar by using a combination of boost::bind and
> Lambda, but it's not 'standard' by any means. :-) Do you have a specific
> example?
>

Hi Peter

This is a bit trivial, but it broadly illustrates the point

int a[10][10];
int min=1, max=20;

boost::function< int(size_t,size_t) > element = (var)[_1][_2];

boost::function< bool(size_t, size_t) > exceeds_range = bind( element,_1,
_2) > max || bind( element,_1,_2) < min;

I'm not sure I've written that quite right, whether I need all those binds,
but the
gist of if is that without local variables I seem to have invoke element()
twice.
I guess I could write something like

boost::function< bool( int ) > exceed_detail = _1 > max || _1 < min;
boost::function< bool( size_t, size_t ) > exceeds_range = bind(
exceeds_detail, bind( element, _1, _2 ) );

but it seems to introduce additional arbitrary artifacts which is not ideal,
and
obscures the logic to my mind.

Thanks, 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