我正在编写一个新容器作为存储在AContainer(一个抽象类)中的常见STL容器的扩展。对于这个容器,我想根据存储的对象(几何对象,如点,线,......)添加新功能......
但问题有点复杂。例如......有几种类型的点(2D,3D ......),大多数属性是相同的...... 哪种数据模型更合适:
1)Universal Container
从每个对象类型的抽象类AContainer派生新类Container。
AContainer -> Container
对其他地质对象执行部分特化
Container <Point>
Container <Edge>
Container <Polygons>
并在这些类中实现它们的行为。
但是这个模型带来了解决不同类型点的相同行为的麻烦。我必须专门为Point2D,point3D
设置ContainerContainer <Point2D>
Container <Point3D>
并且在两个专业化中都写出了他们的行为,因此很多代码都会被复制。
在C ++中,我认为不可能对类和所有派生类进行部分特化。
2)每种对象的特定容器
为每种类型的对象推导新类
AContainer ->ContainerPoints
->ContsinerEdges
->ContainerFaces
有几种不同的容器可以专门化。点行为描述的问题 不会发生,他们的共同属性将在
中定义ContainerPoints
无需任何专业化......
我害怕代码碎片过多(类似的类太多)......例如std :: vector对于每种存储类型都是通用的......
每种几何类型创建新类或进行部分特化是否更好?
感谢您的帮助......
答案 0 :(得分:0)
这个怎么样:
template<class T>
class Container { ... };
class PointContainer : public Container<Point> { };