有没有办法取消引用 lambda 表达式中的占位符?
boost::function<int(MyClass*)> f = _1->myMethod();
f(myObject);
我知道我可以进行绑定:
boost::function<int(MyClass*)> f = boost::bind(&MyClass::myMethod, _1);
,但我想用 if 语句等构建更复杂的表达式。
有没有办法取消引用 lambda 表达式中的占位符?
boost::function<int(MyClass*)> f = _1->myMethod();
f(myObject);
我知道我可以进行绑定:
boost::function<int(MyClass*)> f = boost::bind(&MyClass::myMethod, _1);
,但我想用 if 语句等构建更复杂的表达式。
理论上这应该有效:
struct Foo {
int bla() { return 2; }
};
boost::function<int(Foo*)> func = (_1 ->* &Foo::bla);
Boost 邮件列表上有一个关于各种解决方法的旧讨论。所有这些看起来都相当丑陋。我会坚持使用嵌套bindS
或获得现代 C++ 编译器。