2017-04-18 20 views
1

私は、2つの大きな継承ツリーを持つ数学的なソフトウェアフレームワークを扱っています。これは概念的に触発されています.1つは一般関数(それはFuncから継承されます)と1つは正規化された確率密度関数(それらはPdfから継承されます)です。異なる継承を持つ同じクラスのバージョン

しかし、原則として両方の階層に存在するいくつかのクラスがあります。例えば、Gauss関数です。現時点で

は、同一のソースコード実装とGaussFuncGaussPdfクラスは、クラス名と、それぞれFuncPdf、から継承を除いて、存在します。

この状況を改善するために、ソースコードの2番目のコピーを取り除きたいと思います。例えば、プリプロセッサマクロを#includeステートメントと組み合わせて使用​​するなど、継承ツリー全体を乱すことなくこれを解決するいくつかの方法を考えることができますが、これで行うのが最も賢明なことはわかりません状況。

このような状況での進め方についてのご意見は、大歓迎です。しかし、私はこの問題を先験的に回避するためにソフトウェアプロジェクト全体を再構築することはできないことに注意してください(これは確かに最も純粋なアプローチですが、私の仕事の時間枠内では不可能であり、約)。ちょうどあなたがこのように、継承するクラステンプレート化

+2

:ここ

template<typename Base> class MetaGauss : public Base { ... }; typedef MetaGauss<Func> GaussFunc; typedef MetaGauss<Pdf> GaussPdf; 

はライブデモです。ソースコードなしで伝えるのは難しいです。 – imreal

+1

Pdfは別の階層ではなく、主階層のテンプレート(テンプレートに基づいています) – Swift

+0

@imreal:ソースコードの詳細は興味深いと思いますか?クラス全体のソースは〜2000行なので、それを貼り付けるのはちょっと範囲を超えています:-) – carsten

答えて

関連する問題