
AMDG On 03/09/2011 06:11 AM, Sebastian Theophil wrote:
How can I write a lambda expression with two placeholders, one for the callable object, and one for the function argument, such that supplying the callable object first returns a unary function?
In this case, boost::lambda::_1 by itself does what you want, because the callable object itself is a unary function.
In the example below, generate should be a lambda expression with the first placeholder for the callable object itself, and the second placeholder for the argument. Calling generate(c) should return a unary function that is only missing the function call argument. In fact, it somehow returns type bool already, as proved by the static assert.
#include
struct Arg { };
struct Callable : std::unary_function
{ 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)));
generate(c) will end up calling c(boost::lambda::_1).
Callable c; BOOST_AUTO(fn, generate(c));
BOOST_STATIC_ASSERT((boost::is_same
::value)); Arg a; bool b = fn(a); _ASSERT(b==true); }
In Christ, Steven Watanabe