我正在学习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));
,但不能编译。
答案 0 :(得分:1)
我不认为你想做的事情是可能的。 for_each
将函数应用于范围中的每个元素,但是您尝试调用两个成员函数,并且必须将它们绑定。我认为您的代码是使用for_each
时可以做的最好的代码。 Lambda文档对我来说看起来非常完整,但是你没有尝试做什么的例子。我认为这是有原因的,有一个更合适的算法。正如基里尔所说的那样transform
。
std::transform(a1.begin(), a1.end(), std::back_inserter(a2), bind(&A::get, _1));