がある:
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]
なんで?
どうすれば修正できますか?
ラムダを介さずに、もう少し冗長にすると、別の関数を手動で宣言して使用するboost::bind
と、機能します。つまり、このように:
static bool _wormIdEqual(CWorm* w, int wormId) {
return w->getID() == wormId;
}
any<CWorm*>(worms(), boost::bind(_wormIdEqual, _1, forworm)))