我正在使用具有两个大型继承树的数学软件框架。这在概念上受到启发:一个用于一般函数(它们继承自Func
),一个用于归一化概率密度函数(它们继承自Pdf
)。
但是,在两个层次结构中原则上应该存在一些类,例如Gauss
函数。
目前,除了GaussFunc
和GaussPdf
的类名和继承之外,还有Func
和Pdf
类具有相同的源代码实现,分别
我想通过删除源代码的第二个副本来改善这种情况。我可以想出几种方法来解决这个问题,而不会弄乱整个继承树,例如使用预处理器宏和#include
语句,或者模板,但我不确定什么是最可取的事情在这种情况下做。
非常欢迎任何有关如何处理这种情况的建议。但请注意,我无法对整个软件项目进行重组以避免这个问题(这当然是最理智的方法,但在我工作的时间范围内是不可能的,不在我允许的范围内)约)。
答案 0 :(得分:1)
简化你要继承的课程,如下所示:
template<typename Base>
class MetaGauss : public Base
{
...
};
typedef MetaGauss<Func> GaussFunc;
typedef MetaGauss<Pdf> GaussPdf;
这是一个现场演示: