考虑
Container
类,它基本上存储了一个 Box
对象的 unique_ptr
向量,并且可以对它们执行一些计算。class Container
{
private:
std::vector<std::unique_ptr<Box> > boxes_;
public:
Container(std::vector<std::unique_ptr<Box> > &&boxes): boxes_(std::move(boxes)){}
double TotalVolume() { /* Iterate over this->boxes_ and sum */ }
};
在这里,Box
是一个抽象类,它有一个纯虚方法 double Box::Volume()
。
现在,假设我在主程序中实例化一个容器,如下所示:
std::vector<std::unique_ptr<Box> > x;
x.push_back(std::move(std::unique_ptr<Box>(new SquareBox(1.0)));
x.push_back(std::move(std::unique_ptr<Box>(new RectangularBox(1.0, 2.0, 3.0)));
Container c(x);
我该如何复制c?我想要一个能够复制boxes_
中底层Box
对象的函数,但是我认为只使用基类很难实现这个功能。
vector<Box>
,Container
实际上是某个基类的派生类,该基类具有虚拟的TotalVolume
方法。我的原始问题并不是关于箱子和容器的,而是涉及到一个我正在尝试扩展的复杂项目。 - Salmonstrikes