Evgenii Legotckoi
21 серпня 2019 р. 15:45

C++14 - лямбда функція з кешувального повертається значенням

Припустимо, що ми написали функцію, яка обчислює якесь значення або використовує функцію для обчислення цього значення, при цьому фунція_ яка обчислює значення є досить витратною для обчислення і спрацьовує досить довго. При цьому ми викликаємо лямбда функцію кілька разів в якомусь коді.

Що уникнути багаторазового виклику важкої функції ми можемо кешувати значення, яка повертає важка функція.


Приклад коду

#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

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up