1つは呼び出し可能オブジェクト用、もう1つは関数引数用の2つのプレースホルダーを使用してラムダ式を記述し、呼び出し可能オブジェクトを指定すると最初に単項関数が返されるようにするにはどうすればよいですか。
以下の例でgenerate
は、呼び出し可能オブジェクト自体の最初のプレースホルダーと引数の2番目のプレースホルダーを持つラムダ式である必要があります。呼び出しgenerate(c)
は、関数呼び出し引数のみが欠落している単項関数を返す必要があります。実際、bool
静的アサートによって証明されるように、それは何らかの形ですでに型を返します。
#include <boost/lambda/bind.hpp>
struct Arg {
};
struct Callable : std::unary_function<Arg, bool> {
bool operator()( Arg const& a ) const { return true; }
};
int main( int argc, const char* argv[] ) {
BOOST_AUTO(generate, boost::lambda::bind(boost::lambda::_1, boost::lambda::protect(boost::lambda::_1)));
Callable c;
BOOST_AUTO(fn, generate(c));
BOOST_STATIC_ASSERT((boost::is_same<BOOST_TYPEOF(fn), bool>::value));
Arg a;
bool b = fn(a);
_ASSERT(b==true);
}