Boost.Lambda — заполнитель для разыменования

Есть ли способ разыменовать заполнитель внутри лямбда-выражения?

boost::function<int(MyClass*)> f = _1->myMethod();
f(myObject);

Я знаю, что могу сделать привязку:

boost::function<int(MyClass*)> f = boost::bind(&MyClass::myMethod, _1);

, но я хочу построить более сложное выражение с операторами if и т.д.


person Marc Andreson    schedule 18.03.2012    source источник
comment
boost::function<int(Foo*)> func = (_1 ->* &Foo::bla); должен работать, но у меня не компилируется, и я не понял почему.   -  person pmr    schedule 19.03.2012


Ответы (1)


Теоретически это должно работать:

struct Foo {
  int bla() { return 2; }
};

boost::function<int(Foo*)> func = (_1 ->* &Foo::bla);

Существует старое обсуждение с различными обходными решениями для Boost список рассылки. Все они кажутся довольно некрасивыми. Я бы придерживался вложенного bindS или получил современный компилятор C++.

person pmr    schedule 18.03.2012