Лямбда параметром функции в C++
Параметр функции может принимать лямбду.
В C++20 для этого пишут auto перед
именем параметра. Внутри функции такой
аргумент вызывают как обычную функцию:
int applyTwice(int value, auto fn) {
int first = fn(value);
return fn(first);
}
int main() {
auto add1 = [](int n) {
return n + 1;
};
std::cout << applyTwice(3, add1) << "\n"; // выведет 5
return 0;
}
Лямбда без аргументов подходит для отложенного действия. Функция может вызвать переданный блок один или несколько раз:
void runSafe(auto fn) {
std::cout << "begin\n";
fn();
std::cout << "end\n";
}
int main() {
auto work = []() {
std::cout << "work\n";
};
runSafe(work);
return 0;
}
Лямбда с результатом bool удобна
для проверки значения:
bool checkValue(int n, auto fn) {
return fn(n);
}
int main() {
auto even = [](int n) {
return n % 2 == 0;
};
std::cout << checkValue(8, even) << "\n"; // выведет 1
return 0;
}
Напишите функцию combine с двумя
целыми и параметром auto fn.
Функция возвращает результат лямбды для
этих чисел. Выведите результат для
6 и 7 так, чтобы вернулось
их произведение.
Напишите функцию repeatAction:
целое times и параметр auto fn.
Тело лямбды должно выполниться столько
раз, сколько задано в times.
Проверьте выводом строки "tick"
три раза.