我的问题很简单:我能做这样的事吗?
假设类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()
是二进制函数。
答案 0 :(得分:3)
您不需要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)