成员函数比较作为谓词

时间:2011-07-10 16:53:54

标签: c++ boost-bind

我有这样的结构。

struct A
{
  int someFun() const;
  int _value;
};

我将此结构的对象存储在向量中。

  1. 如何查找成员someFun()返回42的对象?

  2. 如何查找_value42的对象?

  3. 我想我必须使用bindequal_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> >

    ,该怎么办?

1 个答案:

答案 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。