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

时间:2017-04-18 14:59:28

标签: c++ templates inheritance include c-preprocessor

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

但是,在两个层次结构中原则上应该存在一些类,例如Gauss函数。

目前,除了GaussFuncGaussPdf的类名和继承之外,还有FuncPdf类具有相同的源代码实现,分别

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

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

1 个答案:

答案 0 :(得分:1)

简化你要继承的课程,如下所示:

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

typedef MetaGauss<Func> GaussFunc;
typedef MetaGauss<Pdf> GaussPdf;

这是一个现场演示:

http://ideone.com/XD4E6y