[英]mem_fun and bind1st problem
我跟着上课:
class A {
public:
// ctr and etc ...
A* clone(B* container);
};
现在,我已经填充了一个vector<A*> availableObjs
<A *> vector<A*> availableObjs
。 我想在每个上调用clone
,因此将克隆的对象插入到vector<A*>
clonedObjs
类型的新容器clonedObjs
中。 我正在尝试跟随 - 但它不编译:
transform(availableObjs.begin(), availableObjs.end(), back_inserter(clonedObjs),
bind1st(mem_fun(&A::clone), container)); // container is of type B*
有一个简单的方法吗? 我有很多被归类为A - 所以让每个人成为一个算子太多了。
您需要使用bind2nd
而不是bind1st
:
transform(availableObjs.begin(), availableObjs.end(), back_inserter(clonedObjs),
bind2nd(mem_fun(&A::clone), container)); // container is of type B*
由mem_fun(&A::clone)
创建的mem_fun(&A::clone)
函数需要A*
作为其第一个参数。 这是通常隐式指定的实例,在该实例上调用该方法。 A::clone
的第一个“真实”参数是mem_fun(&A::clone)
的第二个参数,因此需要与bind2nd
绑定。
如果您使用Boost.Bind,它可能如下所示:
std::transform(
availableObjs.begin(), availableObjs.end(),
back_inserter(clonedObjs),
boost::bind<A*>(boost::mem_fn(&A::clone), _1, container) );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.