如何从类似的模板类构建对象

时间:2013-01-16 21:24:09

标签: c++ templates inheritance multiple-inheritance class-template

我的目标如下。

我正在数据分析设置中使用蛋白质。可用于任何给定蛋白质的数据是可变的。我希望能够从更简单的父类构建一个蛋白质类。每个父类都特定于我可以使用的数据层。

不同的项目可能有不同的数据层。我想为蛋白质编写简单的类,其中包含与特定数据层相关的所有变量和方法。然后,对于任何给定的项目,能够编译一个项目特定的蛋白质类,该类继承自相关数据层特定的蛋白质类。

此外,每个数据层特定的蛋白质类需要类似的数据层特定的链类,残基类和原子类。它们都是构建块。原子用于构建残基,用于构建用于构建蛋白质的链。蛋白质类需要能够获得其所有原子,残基和链。同样,链需要获得残基和原子。

我使用向量和贴图来存储指向相关对象的指针。还有相关的get和set方法。为了给出每个版本的蛋白质变量以及getter和setter方法,我已经为原子,残基,链和蛋白质制作了1个模板类。该模板类包含载体和getter以及setter方法,这些方法使蛋白质可以进入其链,残基和原子。然后,每个数据层特定的蛋白质类继承此模板类。

这是最好的方法吗?

2 个答案:

答案 0 :(得分:1)

首先,使用继承是一种很好的抽象方式,应该可以帮助您构建自定义类,轻松地为可重用性和维护铺平道路。但是请花一点时间来考虑您的数据结构。使用向量似乎是最自然的方式然而,为了使用动态数据,重新调整向量会带来一些开销,有时在处理大数据时,这就成了一个问题。 为了解决这个问题,尝试提出每个人通常拥有的平均数据。所以你可以拥有一个数组和一个向量,只有当你完成数组时才可以使用向量。这样你就不会太经常遇到间接费用。 根据您将要执行的实际处理,您可能需要重新考虑您的数据结构。例如,您的数据足够小且易于管理,您可以使用向量并更多地关注实际计算。如果大要处理数据集,您可能需要稍微修改一下数据结构以使处理更容易。祝你好运。

答案 1 :(得分:1)

您可能希望查看Composite Design Pattern来组织多级数据,并查看Visitor Design Pattern来编写“访问”您的数据结构的算法。

复合设计模式创建一个Component接口(抽象基类),允许迭代其子层中的所有元素,添加/删除元素等。它还应该有accept(some_function)方法允许外部算法适用于自身。然后,每个特定层(原子,残基,链)将是从Component接口派生的具体类。不要让图层来自其子图层:继承只应反映“is-a”关系,除非是在非常特殊的情况下。

访客设计模式创建了一个算法层次结构,它独立于数据的精确结构。如果数据的类层次结构在可预见的未来不会发生变化,则此模式最有效。 [注意:通过使用特定数据填充结构,您仍然可以获得所需的任何分子,只是不要更改结构中的层数。)

无论您做什么,始终建议仅使用继承来重用或扩展接口,并使用组合来重用/扩展数据。例如。诸如vectormap之类的STL容器没有虚拟析构函数,并且不能用作基类。