|
Boost : |
From: Darren Cook (darren_at_[hidden])
Date: 2004-03-03 18:22:47
> Meantime it again highlights that a core language change to allow anonymous fns is needed so this whole mechanism of BLL can go away.
>
> // PROPOSED CHANGE IN SOME FUTURE PAPER
>
> unsigned long n = std::accumulate(
> xs.begin(), xs.end(), 0UL,
> long (long lhs, X const &rhs) // inline fn with no name.
> {
> return lhs + rhs.count;
> }
> );
I was hoping the syntax would be:
unsigned long n = std::accumulate(
xs.begin(), xs.end(), 0UL,{
return _1 + _2.count;
}
);
With the option of this when you want different names:
unsigned long n = std::accumulate(
xs.begin(), xs.end(), 0UL, lambda(lhs,rhs){
return lhs + rhs.count;
}
);
Incidentally, frustrated with the limits of BLL syntax I've moved to using
macros for the most common cases in one of my programs (e.g. for each
element in a specific container). I went through and replaced all
std::for_each calls, and all for/while loops.
The macro looks very much like the syntax above and the code ended up
shorter, clearer, and also uncovered some bugs: it turns out I'd written a
loop with "i!=c.begin()" instead of "i!=c.end()". The macro always gets that
right.
Max Motovilov wrote:
> Yeah, but do you propose to make local names visible inside the anonymous
> function, or not? If you do, you open a big can of worms for implementations
> (recursive nested functions, need I say more?)
I think local names visible inside the anonymous function is the expected
behaviour.
Can you say more about the potential problems (or point me to a
paper/discussion if this is well-discussed somewhere else)?
Darren
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk