【C++11/14】値か関数を受け取り評価する関数
事の始まりはC++で遅延評価の必要性に駆られたことでした。
// 時間のかかる処理 int n = sum(list); // testの中でnが使われなければ処理が無駄になる test(n);
そこで値の代わりに関数を渡し、必要になったときに評価してもらう方法を取りました。
auto f = [&] { return sum(list); }; test(f);
このやり方だと遅延評価は実現できますが、代償として値を直接渡すことができなくなりました。
test(100); // Error test([] { return 100; }); // OK
そこで値と関数の両方を受け取れる関数を作ることを考えました。
続きを読む