しらいとブログ

ネットで検索してもなかなか出てこないIT情報を独自にまとめています

【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

そこで値と関数の両方を受け取れる関数を作ることを考えました。

続きを読む