Содержание
- 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