3

私はこのような構造を持っています。

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

この構造体のオブジェクトをベクターに格納します。

  1. someFun()メンバーが返すオブジェクトを見つける方法は42?

  2. であるオブジェクトを見つける方法_value42?

bindとの組み合わせを使用する必要があると思いequal_toますが、正しい構文を見つけることができません。

vector<A> va;
vector<A>::const_iterator val = find_if(va.begin(),va.end(),boost::bind(???,42));

編集:

ありがとう。しかし、もう1つ疑問があります。

vector<A*>またはを持っていたらvector<boost::shared_ptr<A> >

4

1 に答える 1

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 );

バインド式を作成する必要がある場合 (たとえば、 でサポートされている演算子で表現できない a を使用する場合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.

于 2011-07-10T17:00:27.700 に答える