数据模型,通用容器,C ++

时间:2011-05-07 16:59:05

标签: c++ data-modeling containers

我正在编写一个新容器作为存储在AContainer(一个抽象类)中的常见STL容器的扩展。对于这个容器,我想根据存储的对象(几何对象,如点,线,......)添加新功能......

但问题有点复杂。例如......有几种类型的点(2D,3D ......),大多数属性是相同的...... 哪种数据模型更合适:

1)Universal Container

从每个对象类型的抽象类AContainer派生新类Container。

AContainer -> Container

对其他地质对象执行部分特化

Container <Point>
Container <Edge>
Container <Polygons>

并在这些类中实现它们的行为。

但是这个模型带来了解决不同类型点的相同行为的麻烦。我必须专门为Point2D,point3D

设置Container
Container <Point2D>
Container <Point3D>

并且在两个专业化中都写出了他们的行为,因此很多代码都会被复制。

在C ++中,我认为不可能对类和所有派生类进行部分特化。

2)每种对象的特定容器

为每种类型的对象推导新类

AContainer ->ContainerPoints
           ->ContsinerEdges
           ->ContainerFaces

有几种不同的容器可以专门化。点行为描述的问题 不会发生,他们的共同属性将在

中定义
ContainerPoints

无需任何专业化......

我害怕代码碎片过多(类似的类太多)......例如std :: vector对于每种存储类型都是通用的......

每种几何类型创建新类或进行部分特化是否更好?

感谢您的帮助......

1 个答案:

答案 0 :(得分:0)

这个怎么样:

  template<class T>
  class Container { ... };
  class PointContainer : public Container<Point> { };