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

Can I use boost::bind() with mem_fun_ref()?

本文关键字:一起 ref mem boost bind 我可以 fun      更新时间:2023-10-16

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

假设类 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)