sou*_*g78 2 c++ transform mem-fun
我跟着上课:
class A {
public:
// ctr and etc ...
A* clone(B* container);
};
Run Code Online (Sandbox Code Playgroud)
现在,我已经vector<A*> availableObjs填满了人口.我想调用其中clone的每一个,然后将克隆的对象插入到一个新clonedObjs的类型容器中vector<A*>.我正在尝试跟随 - 但它不编译:
transform(availableObjs.begin(), availableObjs.end(), back_inserter(clonedObjs),
bind1st(mem_fun(&A::clone), container)); // container is of type B*
Run Code Online (Sandbox Code Playgroud)
有一个简单的方法吗?我有很多被归类为A - 所以让每个人成为一个算子太多了.
sth*_*sth 12
您需要使用bind2nd而不是bind1st:
transform(availableObjs.begin(), availableObjs.end(), back_inserter(clonedObjs),
bind2nd(mem_fun(&A::clone), container)); // container is of type B*
Run Code Online (Sandbox Code Playgroud)
创建的仿函数mem_fun(&A::clone)需要一个A*作为其第一个参数.这是通常隐式指定的实例,在该实例上调用该方法.第一个"真实"参数A::clone是第二个参数,mem_fun(&A::clone)因此需要绑定bind2nd.