Evgenii Legotckoi
Там. 21, 2019, 3:45 Т.Қ.

C++14 - кэштелетін қайтару мәні бар лямбда функциясы

Предположим, мы написали функцию, которая вычисляет какое-то значение или использует функцию для вычисления этого значения, при этом функция_, которая вычисляет значение, достаточно затратна в вычислении и долго работает. В этом случае мы вызываем лямбда-функцию несколько раз в некотором коде.

Чтобы избежать множественных вызовов тяжелой функции, мы можем кэшировать значение, которое возвращает тяжелая функция.


Пример кода

#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

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз