有:
template<typename T>
bool any(::Ref<Iterator<T> > i, boost::function<bool(T)> pred) {
// ...
}
和:
template<typename T> struct Ref {
// ...
};
template<typename T> struct Iterator {
// ...
};
然后我有这个电话(哪些错误):
int forworm = 42;
bool x = any<CWorm*>(worms(), (_1 ->* &CWorm::getID) == forworm)
并worms()
返回一个Ref<Iterator<CWorm*> Ref>
并且存在int CWorm::getID();
(这是一个成员函数)。
这将失败,并出现关于二进制表达式的无效操作数的非常冗长的错误。一部分:
/usr/local/include/boost/lambda/detail/operator_lambda_func_base.hpp:222:1:{222:1-222:63}{222:1-222:63}:错误:二进制表达式的操作数无效('typename lambda_functor_base >, tuple >, int (CWorm::*const)() const, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type> >::sig >::type'(又名'member_pointer_caller')和'int') [3]
为什么?
我该如何解决?
如果我做得更详细一些,即不是通过 lambdas,而是我手动声明另一个函数并使用boost::bind
,它就可以工作。即像这样:
static bool _wormIdEqual(CWorm* w, int wormId) {
return w->getID() == wormId;
}
any<CWorm*>(worms(), boost::bind(_wormIdEqual, _1, forworm)))