Лямбда-функция - анонимная функция, которую вы создаете в строке. Он может захватывать переменные, как объясняли некоторые (например, http://www.stroustrup.com/C++11FAQ.html#lambda ), но есть некоторые ограничения. Например, если есть интерфейс обратного вызова, подобный этому,
void apply(void (*f)(int)) {
f(10);
f(20);
f(30);
}
, вы можете написать функцию на месте, чтобы использовать ее как переданную для применения ниже:
int col=0;
void output() {
apply([](int data) {
cout << data << ((++col % 10) ? ' ' : '\n');
});
}
Но вы не можете этого сделать:
void output(int n) {
int col=0;
apply([&col,n](int data) {
cout << data << ((++col % 10) ? ' ' : '\n');
});
}
из-за ограничений в стандарте C ++ 11. Если вы хотите использовать захваты, вам нужно полагаться на библиотеку и
#include
(или какую-либо другую библиотеку STL, такую как алгоритм, чтобы получить ее косвенно), а затем работать с std :: function, а не передавать нормальные функции как такие параметры:
#include
void apply(std::function f) {
f(10);
f(20);
f(30);
}
void output(int width) {
int col;
apply([width,&col](int data) {
cout << data << ((++col % width) ? ' ' : '\n');
});
}