java 8 суммирует все значения двух массивов int друг с другом

Лямбда-функция - анонимная функция, которую вы создаете в строке. Он может захватывать переменные, как объясняли некоторые (например, 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');
    });
}

16
задан Andrew Tobilko 14 August 2017 в 09:51
поделиться