Содержание
- 1. Пример кода
- 2. Результат
Предположим, мы написали функцию, которая вычисляет какое-то значение или использует функцию для вычисления этого значения, при этом функция_, которая вычисляет значение, достаточно затратна в вычислении и долго работает. В этом случае мы вызываем лямбда-функцию несколько раз в некотором коде.
Чтобы избежать множественных вызовов тяжелой функции, мы можем кэшировать значение, которое возвращает тяжелая функция.
Пример кода
#include <iostream> #include <string> using namespace std; int heavy_calc(int base) // heavy function that we want to call once { cout << "heavy_calc" << std::endl; // sleep(+100500 years) return base * 25; } void calclulateValue(int base) { // The following construction allows you to cache the result of executing a heavy function for the duration of one call to calclulateValue auto foo { [cache = heavy_calc(base)]() { return cache; } }; // We call the lambda twice with the cached heavy calc value // In this case, heavy calc is called only once int fooFoo = foo() + foo(); cout << fooFoo << std::endl; } int main() { // Call calclulateValue twice with a different base value, // to show that the cache is reset every time calclulateValue is called calclulateValue(1); calclulateValue(10); return 0; }
Результат
heavy_calc 50 heavy_calc 500