我正在尝试使用地图容器来保存形状并将这些形状与 ID 号匹配。
到目前为止,我一直使用 STL 容器来保存和内存管理我的对象。所以我会使用这些类型的容器:
std::map<int, Square> squares;
std::map<int, Triangle> triangles;
std::map<int, Circle> circles;
但我想要一个单独的地图来保存“形状”,这是一个方形、三角形和圆形的抽象基类。所以要实现这一点,我还是会把可实现的派生类对象存储在自己的映射中,然后再有另一个映射:
std::map<int, Shape*> shapes;
存储指向存储在其他映射中的对象的指针。
不过,这似乎很混乱,我宁愿将所有对象存储在一个拥有并内存管理所包含对象的多态映射中。
在阅读了一些关于 Boost 的 ptr_map 之后,我预计这就是解决方案。但似乎基类需要在尝试使用时实现:
boost::ptr_map<int,Shape> shapes;
我收到错误:“错误:无法分配抽象类型‘Shape’的对象”
我必须使基类可实现吗?这将是一个黑客,所以我宁愿正确地做到这一点,如果有这样的方式。
关于如何做到这一点,我的下一个最佳猜测是使用容器,例如:
std::map<int, boost::shared_ptr<Shape> > shapes;
这似乎是一个简单的目标,但由于我遇到了这样的困难,我怀疑我正在尝试做一些我不应该做的事情。因此,非常感谢任何关于我可能出错的地方的建议。
谢谢。