Чистый способ ленивой инициализации и кэширования внутреннего значения в лямбде

, если вы используете angularjs & amp; aspnet / mvc, чтобы получить json-файлы, вы должны разрешить тип mime в web config

<staticContent>
    <remove fileExtension=".json" />
    <mimeMap fileExtension=".json" mimeType="application/json" />
  </staticContent>
8
задан R2RT 18 January 2019 в 10:01
поделиться

1 ответ

Я верю, что это именно тот случай использования изменяемой лямбды. Если вы не хотите, чтобы все переменные были изменяемыми, я предлагаю просто создать класс функторов с одним полем mutable. Таким образом, вы получаете лучшее из обоих миров (хорошо, это не так кратко). Дополнительным преимуществом является то, что operator() равно const (что совершенно верно, поскольку оно всегда возвращает одно и то же значение)

#include <optional>

int heavy_calc() {
    // sleep(7500000 years)
    return 42;
}
struct my_functor {
    mutable std::optional<int> cache;
    int operator()() const {
        if (!cache) cache = heavy_calc();
        return *cache;
    }
}

int main() {
    my_functor foo;
    return foo() + foo();
}
0
ответ дан bartop 18 January 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: