Зміст
- 1. Приклад коду
- 2. Результат
Припустимо, що ми написали функцію, яка обчислює якесь значення або використовує функцію для обчислення цього значення, при цьому фунція_ яка обчислює значення є досить витратною для обчислення і спрацьовує досить довго. При цьому ми викликаємо лямбда функцію кілька разів в якомусь коді.
Що уникнути багаторазового виклику важкої функції ми можемо кешувати значення, яка повертає важка функція.
Приклад коду
#include <iostream> #include <string> using namespace std; int heavy_calc(int base) // важка функція, яку хочемо викликати один раз { cout << "heavy_calc" << std::endl; // sleep(+100500 years) return base * 25; } void calclulateValue(int base) { // Наступна конструкція дозволяє кешувати результат виконання важкої функції на час одного виклику calclulateValue auto foo { [cache = heavy_calc(base)]() { return cache; } }; // Двічі викликаємо лямбда з кешуватися значенням heavy calc // При цьому heavy calc викликається всього один раз int fooFoo = foo() + foo(); cout << fooFoo << std::endl; } int main() { // Викличемо calclulateValue двічі з різним базовим значенням, // щоб показати, що кеш обнуляється при кожному виклику calclulateValue calclulateValue(1); calclulateValue(10); return 0; }
Результат
heavy_calc 50 heavy_calc 500