gpt4 book ai didi

c++ - 使用 boost::lambda 调用成员函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:37:14 25 4
gpt4 key购买 nike

我正在学习 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经过几次尝试后部分开始工作。但我仍然不喜欢那些多重绑定(bind)。有没有其他方法可以写这个。最好我想做这样的事情:a2.push_back(bind(&A::get,_1)); , 但不能编译。

最佳答案

我认为您尝试做的事情是不可能的。 for_each 将函数应用到范围内的每个元素,但您正试图调用两个成员函数并且您必须将它们都绑定(bind)。我认为您的代码是您在使用 for_each 时所能做的最好的。 Lambda 文档对我来说看起来非常完整,但是没有关于您要执行的操作的示例。我认为这是有原因的,对此有更合适的算法。正如 Kirill 所说,它是 transform

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

关于c++ - 使用 boost::lambda 调用成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1899037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com