lazy¶
Header¶
#include <boost/hof/lazy.hpp>
Description¶
The lazy function adaptor returns a function object call wrapper for a
function. Calling this wrapper is equivalent to invoking the function. It
is a simple form of lambda expressions, but is constexpr friendly. By
default, lazy captures all of its variables by value, just like bind.
std::ref can be used to capture references instead.
Ultimately, calling lazy(f)(x) is the equivalent to calling
std::bind(f, x) except the lazy version can be called in a constexpr
context, as well. The lazy adaptor is compatible with std::bind, so
most of the time lazy and std::bind can be used interchangeably.
Synopsis¶
template<class F>
constexpr lazy_adaptor<F> lazy(F f);
Semantics¶
assert(lazy(f)(xs...) == std::bind(f, xs...))
assert(lazy(f)(xs...)() == f(xs...))
assert(lazy(f)(_1)(x) == f(x))
assert(lazy(f)(lazy(g)(_1))(x) == f(g(x)))
Example¶
#include <boost/hof.hpp>
#include <cassert>
using namespace boost::hof;
int main() {
auto add = [](auto x, auto y) { return x+y; };
auto increment = lazy(add)(_1, 1);
assert(increment(5) == 6);
}




