mem_fun和bind1st问题
我有以下课程:
class A {
public:
// ctr and etc ...
A* clone(B* container);
};
现在,我有一个向量 availableObjs 已填充。我想对每个对象调用 clone
,因此将克隆的对象插入到 vector
类型的新容器 clonedObjs
中。我正在尝试以下操作 - 但它无法编译:
transform(availableObjs.begin(), availableObjs.end(), back_inserter(clonedObjs),
bind1st(mem_fun(&A::clone), container)); // container is of type B*
有一个简单的方法吗?我有很多像 A 类的东西 - 所以让每一个都成为函子是一项艰巨的任务。
I've following class:
class A {
public:
// ctr and etc ...
A* clone(B* container);
};
Now, I've a vector<A*> availableObjs
populated already. I want to call clone
on each of those, so and insert cloned objects into a new container clonedObjs
of type vector<A*>
. I'm trying following - but it doesn't compile:
transform(availableObjs.begin(), availableObjs.end(), back_inserter(clonedObjs),
bind1st(mem_fun(&A::clone), container)); // container is of type B*
Is there a easy way out? I've a lot classed like A - so making each of those a functor is too much task.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要使用
bind2nd
而不是bind1st
:由
mem_fun(&A::clone)
创建的函子需要一个A*
作为其第一个参数。这是通常隐式指定的实例,在该实例上调用该方法。A::clone
的第一个“真实”参数是mem_fun(&A::clone)
的第二个参数,因此需要与bind2nd 绑定
。You need to use
bind2nd
instead ofbind1st
:The functor created by
mem_fun(&A::clone)
expects anA*
as its first parameter. This is the normally implicitly specified instance on which the method is called. The first "real" parameter ofA::clone
is the second parameter ofmem_fun(&A::clone)
and therefore needs to be bound withbind2nd
.如果您使用 Boost.Bind 它可能看起来像这样:
If you use Boost.Bind it might look like this: