mem_fun和bind1st问题

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.