Как я могу написать лямбда-выражение с двумя заполнителями, один для вызываемого объекта и один для аргумента функции, чтобы при предоставлении вызываемого объекта сначала возвращалась унарная функция.
В приведенном ниже примере generate
должно быть лямбда-выражением с первым заполнителем для самого вызываемого объекта и вторым заполнителем для аргумента. Вызов 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);
}