我有这样的结构。
struct A
{
int someFun() const;
int _value;
};
我将此结构的对象存储在向量中。
如何查找成员someFun()
返回42
的对象?
如何查找_value
为42
的对象?
我想我必须使用bind
和equal_to
的组合,但我无法找到正确的语法。
vector<A> va;
vector<A>::const_iterator val = find_if(va.begin(),va.end(),boost::bind(???,42));
修改
感谢。但还有一个疑问。
如果我有vector<A*>
或vector<boost::shared_ptr<A> >
答案 0 :(得分:4)
vector<A> va;
vector<A>::const_iterator v0 = find_if(
va.begin()
, va.end()
, boost::bind(&A::someFun, _1) == 42 );
vector<A>::const_iterator v1 = find_if(
va.begin()
, va.end()
, boost::bind(&A::_value, _1) == 42 );
如果你做需要编写绑定表达式(例如使用functor
无法用boost::bind
支持的运算符表示的话:
vector<A>::const_iterator v1 = find_if(
va.begin()
, va.end()
, boost::bind(functor(), boost::bind(&A::someFun, _1), 42) );
导致使用以下参数调用functor::operator()
:在绑定表达式的参数上调用成员的结果,以及42。