gpt4 book ai didi

c++ - 我可以将 boost::bind() 与 mem_fun_ref() 一起使用吗?

转载 作者:太空狗 更新时间:2023-10-29 21:27:00 27 4
gpt4 key购买 nike

我的问题很简单:我可以做这样的事情吗?

假设类 foo 包含以下成员函数:

foo foo::DoSomething(input_type1 input1, input_type2 input2)
{
... // Adjust private datamembers
return *this;
}

使用 foo:

std::vector<foo> foovec;
input_type1 in1;
input_type2 in2;
...
std::transform(foovec.begin(), foovec.end(), foovec.begin(), std::mem_fun_ref(boost::bind(&foo::DoSomething, in1, in2)));

这可能吗?问题主要在于 boost::bind() 是否会影响它所处理的函数的成员/非成员性质。我想我不能像这样反过来:

std::transform(foovec.begin(), foovec.end(), foovec.begin(), boost::bind(std::mem_fun_ref(&foo::DoSomething), _1, in1, in2)));

因为 std::mem_fun_ref() 采用一元或零函数,而 DoSomething() 是二进制的。

最佳答案

你不需要std::mem_fun_ref,只需使用:

std::transform(foovec.begin(),
foovec.end(),
foovec.begin(),
boost::bind(&foo::DoSomething, _1, in1, in2));

或者您可以将 boost::bind 替换为

std::bind(&foo::DoSomething, std::placeholders::_1, in1, in2)

关于c++ - 我可以将 boost::bind() 与 mem_fun_ref() 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201120/

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