2012-03-18 2 views
0

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

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

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

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

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

+0

'boost :: function func = (_1 -> * & Foo :: bla);' должен работать, но не компилируется для меня, и я не понял почему. – pmr

ответ

1

В теории это должно работать:

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

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

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

Смежные вопросы