Lol yeah you'd never write either of those two bits of code, hopefully :lol:
The lambda syntax comes in handy when you want to reuse a bit of code, but don't want to bother actually breaking it out into it's own independent function, yet. e.g.
void test()
{
int sum = 0;
auto SumArray = [&](int* data, int size){
for( int i=0; i!=size; ++i )
sum += data[i];
};
for( int widgetIdx=0; widgetIdx != numWidgets; ++widgetIdx )
SumArray( widgets[widgetIdx].data, widgets[widgetIdx].size );
SumArray( specialWidget.data, specialWidget.size );
printf( "%d\n", sum );
}
which is shorthand for:
void test()
{
int sum = 0;
struct _ { _(int& sum):sum(sum){}int& sum;
void operator()(int* data, int size){
for( int i=0; i!=size; ++i )
sum += data[i];
};
}SumArray(sum);
for( int widgetIdx=0; widgetIdx != numWidgets; ++widgetIdx )
SumArray( widgets[widgetIdx].data, widgets[widgetIdx].size );
SumArray( specialWidget.data, specialWidget.size );
printf( "%d\n", sum );
}
or the more obvious, actually breaking it out into it's own separate function:
namespace { void SumArray(int* data, int size, int& sum){
for( int i=0; i!=size; ++i )
sum += data[i];
};}
void test()
{
int sum = 0;
for( int widgetIdx=0; widgetIdx != numWidgets; ++widgetIdx )
SumArray( widgets[widgetIdx].data, widgets[widgetIdx].size, sum );
SumArray( specialWidget.data, specialWidget.size, sum );
printf( "%d\n", sum );
}