如何编写带有两个占位符的 lambda 表达式,一个用于可调用对象,一个用于函数参数,以便首先提供可调用对象返回一元函数。
在下面的示例中,generate
应该是一个 lambda 表达式,其中第一个占位符代表可调用对象本身,第二个占位符代表参数。调用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);
}