|
Boost : |
From: Joel (joel_at_[hidden])
Date: 2005-01-06 00:47:20
Aleksey Gurtovoy wrote:
> Daniel Wallin writes:
>
>>Well OK, let's do that. What are your thoughts about adding something
>>like this?
>>
[...]
>
>
> While straightforward, a primitive like 'unlambda' won't cover many
> use cases that I consider important. I'd be inclined towards more
> systematic approach to nested scoping, something along the lines of
> what is discussed in the attached conversation (long, but
> insightful). May be even implicit scoping for the library algorithms
> as described in one of these emails.
Hi Aleksey,
Currently, Phoenix has local variables, lambda and scopes.
IMHO, Phoenix-2 has the best syntax yet that satisfies all
requirements so far:
Here's the solution to the use-case posed in the email
exchanges above:
write a lambda expression that accepts:
1. a 2-dimensional container (e.g. vector<vector<int> >)
2. a container element (e.g. int)
and pushes-back the element to each of the vector<int>.
Solution:
for_each(_1,
lambda(_a = _2)
[
push_back(_1, _a)
]
)
Since we do not have access to the arguments of the outer scopes
beyond the lambda-body, we introduce a local variable _a that
captures the second outer argument: _2. Hence: _a = _2. This
local variable is visible inside the lambda scope.
<< Daniel helped in the brainstorming too. >>
Cheers,
-- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk