【发布时间】:2017-04-18 14:59:27
【问题描述】:
我正在使用具有两个大型继承树的数学软件框架。这在概念上受到启发:一种用于一般函数(它们继承自 Func),一种用于归一化概率密度函数(它们继承自 Pdf)。
但是,原则上有些类应该存在于两个层次结构中,例如,Gauss 函数。
目前,有一个GaussFunc 和一个GaussPdf 类具有相同的源代码实现,除了类名和分别从Func 和Pdf 继承。
我想通过删除源代码的第二个副本来改善这种情况。我可以想出几种方法来解决这个问题而不会弄乱整个继承树,例如将预处理器宏与#include 语句或模板结合使用,但我不确定什么是最明智的做法在这种情况下。
非常欢迎任何关于如何在这种情况下进行的建议。但是,请注意,我不能重组整个软件项目来避免这个问题先验(这当然是最理智的方法,但在我的工作时间范围内是不可能的,也不在我被允许决定的事情范围内大约)。
【问题讨论】:
-
这听起来像是对继承的滥用。没有源代码很难说。
-
听起来 Pdf 不应该是单独的层次结构,而是一些适配器(基于模板?)用于主层次结构
-
@imreal:源代码的哪些细节会很有趣?该类的整个源代码约为 2000 行,因此将其全部粘贴有点超出了我假设的范围:-)
-
@Swift:是的,那样会更好。但就目前而言,我仍然坚持现状。
-
某些东西提供了为什么类需要继承的线索。如果它不依赖于其父类的(
Func和pdf)接口,或者它们也具有相同的实现,那么问题可能在层次结构上更高。
标签: c++ templates inheritance include c-preprocessor