【发布时间】:2015-05-03 14:47:42
【问题描述】:
什么是允许指向派生类的共享指针向量传递给一个函数的正确方法,该函数期望一个指向基类的共享指针向量而不执行复制?
代码如下:
#include <string>
#include <vector>
#include <memory>
class Base {
public:
std::string Name;
};
using BaseList = std::vector<std::shared_ptr<Base>>;
class Derived : Base {
};
using DerivedList = std::vector<std::shared_ptr<Derived>>;
class BaseHandler {
public:
void process( BaseList list ) {
}
};
int main() {
DerivedList list;
BaseHandler bh;
bh.process( list );
}
代码链接:http://coliru.stacked-crooked.com/a/5a5b18ba3b2a4f08
编辑:DOH!!!我发错了。很抱歉...这里是 shared_ptr 之一。
【问题讨论】:
-
没有办法,无论是否合适。
-
复制什么?
std::shared_ptr的?复制它们没什么大不了的(顺便说一句,它们的共享状态没有被深度复制)。 -
注意:vector
不是vector 的基类。 -
啊……对了!那么,我是否必须遍历它们并将它们复制到新向量才能做到这一点?
-
如果是这样,那就太糟糕了。我也想知道这个。但我认为你不能做得更好。