$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] Case study: Boost.Local versus Boost.Phoenix
From: Christian Holmquist (c.holmquist_at_[hidden])
Date: 2011-02-04 09:47:42
>
> I'm sorry is it only me or it would be much more readable
> and maintainable to write:
>
> namespace {
>   struct my_lambda  {
>       foo_type &foo;
>       bar_type &bar
>       my_lambda(foo_type &local_foo,bar_type &local_bar) :
>           foo(local_foo),
>           bar(local_bar)
>       {
>       }
>
>       void operator()(a_type a) const
>       {
>             /// Your body goes there
>       }
>
>   };
> }
>
> void my_function()
> {
>    foo_type foo;
>    bar_type bar;
>
>    my_lambda lambda(foo,bar);
>    for_each(as.begin(),as.end(),lambda);
>    // or something else
> }
>
>
>
It's not just you.
I've made a habit (which have been widely adapted by others at my workplace)
to make local lambdas like this:
void my_function()
{
   foo_type foo;
   bar_type bar;
  struct {
      foo_type &foo_;
      bar_type &bar_;
      void operator()(a_type a) const
      {
           foo_(a);
           bar_(a);
      }
   } lambda = { foo, bar} ;
   for_each(as.begin(),as.end(),lambda);
}
I don't know if that's standard compliant, but works perfectly fine in MSVC.
I like the {} initializer, so I don't need to write a boilerplate
constructor.
- Christian