C++ 具有不同继承的同一类的版本

C++ 具有不同继承的同一类的版本,c++,templates,inheritance,include,c-preprocessor,C++,Templates,Inheritance,Include,C Preprocessor,我正在使用一个数学软件框架,它有两个大的继承树。这是从概念上得到启发的:一个用于一般函数(它们继承自Func),另一个用于规范化概率密度函数(它们继承自Pdf) 但是,原则上两种层次结构中都存在一些类,例如,Gauss函数 目前,有一个GaussFunc和一个GaussPdf类具有相同的源代码实现,但类名和继承分别来自Func和Pdf 我希望通过删除源代码的第二个副本来改善这种情况。我可以想出几种方法来解决这个问题,而不会弄乱整个继承树,例如使用预处理器宏与#include语句或模板相结合,但我

我正在使用一个数学软件框架,它有两个大的继承树。这是从概念上得到启发的:一个用于一般函数(它们继承自
Func
),另一个用于规范化概率密度函数(它们继承自
Pdf

但是,原则上两种层次结构中都存在一些类,例如,
Gauss
函数

目前,有一个
GaussFunc
和一个
GaussPdf
类具有相同的源代码实现,但类名和继承分别来自
Func
Pdf

我希望通过删除源代码的第二个副本来改善这种情况。我可以想出几种方法来解决这个问题,而不会弄乱整个继承树,例如使用预处理器宏与
#include
语句或模板相结合,但我不确定在这种情况下最明智的做法是什么


任何关于在这种情况下如何进行的建议都是非常受欢迎的。但是,请注意,我无法预先重组整个软件项目以避免这个问题(这当然是最明智的方法,但在我的工作时间范围内,也不可能在允许我决定的范围内)。

只需模板化要从中继承的类,如下所示:

template<typename Base>
class MetaGauss : public Base
{
    ...
};

typedef MetaGauss<Func> GaussFunc;
typedef MetaGauss<Pdf> GaussPdf;
模板
类:公共基
{
...
};
typedef亚高斯高斯函数;
typedef亚高斯高斯分布函数;
这是一个现场演示:


这听起来像是对继承的滥用。没有源代码很难说。听起来Pdf不应该是独立的层次结构,而应该是一些适配器(基于模板?)hierarchy@imreal:源代码的哪些细节是有趣的?这个类的全部源代码是~2000行,所以粘贴这些代码有点超出了的范围,所以我假设:-)@Swift:是的,那样会更好。但就目前而言,我一直坚持现状,这为类为什么需要继承提供了线索。如果它不依赖于其父类(
Func
pdf
)接口,或者它们也有相同的实现,那么问题可能在层次结构上更高。