2

私はライブラリを学んでいます。そのために、オブジェクトから値を抽出してに変換boost::lambdaするこのサンプルコードを書きました。vector<A>vector<int>A

class A
{
public:
    A(int n) : m_n(n){}
    int get() const {return m_n;}

private:
    int m_n;

};

int _tmain(int argc, _TCHAR* argv[])
{
    using namespace boost::lambda;

    std::vector<A> a1;
    std::vector<int> a2;
    a1.push_back(A(10));
    a1.push_back(A(20));

    std::for_each(a1.begin(), a1.end(), bind(&std::vector<int>::push_back, var(a2), bind(&A::get, _1)));

    return 0;
}

for_each何度か試した後、パーツを機能させることができました。しかし、私はまだそれらの複数のバインドでそのようには見えません。これを書く他の方法はありますか?できれば次のようなことをしたいのですa2.push_back(bind(&A::get,_1));が、それはコンパイルされません。

4

1 に答える 1

1

あなたがやろうとしていることは不可能だと思います。for_each範囲内の各要素に関数を適用しますが、2 つのメンバー関数を呼び出そうとしているため、両方をバインドする必要があります。あなたのコードは、を使用するときにできる最善のことだと思いますfor_each。ラムダのドキュメントは私には非常に完全に見えますが、あなたがやろうとしていることの例はありません. それには理由があると思います。これには、より適切なアルゴリズムがあります。キリルの言うとおりだtransform

std::transform(a1.begin(), a1.end(), std::back_inserter(a2), bind(&A::get, _1));
于 2009-12-14T07:57:51.157 に答える