Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
boost::function< int ( int ) > make_adding_func( int t )
{
return [=]( int a ){ return a + t; };
}
...
auto f = make_adding_func( 5 );
assert( f( 10 ) == 15 );
boost::function< int ( int ) > make_adding_func( int t )
{
return [=]( int a ){ return a + t; };
}
...
auto f = make_adding_func( 5 );
assert( f( 10 ) == 15 );
auto g = make_adding_func( 7 );
assert( g( 10 ) == 17 );
Не вдаваясь в подробности, замыкания — это такие объекты, которые позволяют создавать функции прямо в теле других функций.
void do_print(std::function<int (int)> func)
{
for (int i = 0; i < 10; ++i)
{
cout << func(i) << " ";
}
cout << endl;
}
do_print( [](int x){ return x*x*x; } );
template int closureToFunction(int x){
CL cl;
return (*cl)(x);
}
#define CLOSURE_TO_FUNCTION(cl) closureToFunction <decltype(&cl)>
int main()
{
auto cube = [](int x){return x*x*x;};
printFunctionTable(CLOSURE_TO_FUNCTION(cube));
return 0;
}
C++0x: Конвертируем лямбда-выражение в указатель на функцию