Я верю, что это именно тот случай использования изменяемой лямбды. Если вы не хотите, чтобы все переменные были изменяемыми, я предлагаю просто создать класс функторов с одним полем 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();
}
Я не думаю, что существует способ добраться рядом распечатка этих двух файлов, являющихся diffed. Но, Вы могли использовать инструмент "Convert to HTML" Vim на каждом из этих двух файлов, являющихся diffed, и распечатать их отдельно. Вы могли затем сложить их рядом для получения того же эффекта.
Преобразуйте в HTML, вид "симпатичной печати" - это сохраняет всю визуальную информацию цвета/синтаксиса/сгиба.
:he convert-to-HTML