
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