|
Boost : |
From: Joel de Guzman (joel_at_[hidden])
Date: 2004-03-03 22:29:50
Jonathan Turkanis wrote:
> "Shannon Stewman" <stew_at_[hidden]> wrote in message
> news:20040304025205.GD832_at_uchicago.edu...
>
>>On Wed, Mar 03, 2004 at 01:34:50PM -0800, Powell, Gary wrote:
>>
>>
>>>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;
>>> }
>>> );
>>
>>This seems to cast out the type inference present in BLL. I think
>>that's one of the nicer concepts in the lambda library, and a real
>>boon to programming. In my limited experience with SML/OCaml, type
>>inference seems a better, safer, and more convenient way to program,
>>albeit requiring a lot more compiler intelligence. As BLL shows,
>
> though,
>
>>this is quite possible, though perhaps limited, with existing C++.
>>
>
>
> How about:
>
> unsigned long n = std::accumulate(
> xs.begin(), xs.end(), 0UL,
> auto(long lhs, const auto& rhs) // inline fn with no
> name.
> {
> return lhs + rhs.count;
> }
> );
I would prefer also eliding the argument types:
unsigned long n = std::accumulate(
xs.begin(), xs.end(), 0UL,
lambda(lhs, rhs)
{
return lhs + rhs.count;
}
);
Most of the time, you also do not know the type of the
arguments before hand.
-- 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