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将函数应用于范围内的每个元素,但是您尝试调用两个成员函数,并且必须将它们都绑定。我认为您的代码是使用for_each. Lambda 文档对我来说看起来非常完整,但是没有你想要做什么的例子。我认为这是有原因的,有一个更合适的算法。正如基里尔所说的那样transform

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