代码之家  ›  专栏  ›  技术社区  ›  Naveen

使用boost::lambda调用成员函数

  •  2
  • Naveen  · 技术社区  · 16 年前

    我正在学习 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)); ,但它不能编译。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Nikola Smiljanić    16 年前

    我不认为你想做的是可能的。 for_each 将函数应用于范围中的每个元素,但您正尝试调用两个成员函数,并且必须同时绑定它们。我认为您的代码是您在使用 每一个 . lambda文档在我看来非常完整,但是没有示例说明您要做什么。我认为这是有原因的,有一个更合适的算法。就像基里尔说的 transform .

    std::transform(a1.begin(), a1.end(), std::back_inserter(a2), bind(&A::get, _1));