最近私が手に取ったコードに関する質問があります。テンプレートからの継承C++
template< class I, class P, class D, unsigned int ID = 0 >
class PathFilter : public Filter< I, P, 1 >
{
...
}
template< class I, class A, unsigned int N = 1 >
class Filter : public Algorithm< I, A >
{
...
}
template< class I, class A >
class Algorithm : public A //This line
{
...
}
:C++テンプレートのパラダイムでは、次の継承(例として、わずか3クラス)を行うために正しいか有益である場合、私はちょうど知りたいです
私の質問は、特に第3の例の継承についてです。それを「ジェネリック」と正確ではないようにすることは有用ですか?もっと一般的なコードで理解できるコードを妥協するのは良い選択ですか?
私はC++テンプレートの専門家ではなく、テンプレートを使用してこのコードを理解することが難しいため、最初に質問します(通常、テンプレートの名前はその内容について何も言いません)。何かアドバイス?
だから、もしそれがあなたが望むなら、大丈夫です。読みやすさに関しては、テンプレートパラメータに奇妙に名前を付けるという伝統があります。私、P、Aなどですが、あなたはそうする必要はありません:)。彼らにより良い名前をつけてください。そして、彼らは自己記述的になるかもしれません。 –
あなたの答えをありがとうが、私はまだ質問があります。私は、「より高い」クラスでいくつかの機能の一般的かつ抽象的な定義を使用することを理解しています。しかし、テンプレートの主な目的はパラメータ型を一般化することではありませんか?私が最後に言っていることは、このクラスにほとんどすべてを渡して、より低い階層の機能を保つことができるということです。最後に、下位の関数を継承できる(おそらく1つの)オブジェクトの非常に制限されたセットを持っていますが、間違っていますか?その一般性を定義することは非実用的な方法ではありませんか? –
あなたは正しいです。確かに、クラスAの特定のセットは、最終的にコンパイルを可能にする 'アルゴリズム'に適合しています( 'A'は何らかの形でが'アルゴリズム '>によって指定されたインタフェースを実装する必要があります)。 テンプレートを設計目的で使用しています。あなたがしたいのは、 'Algorithm <> 'を一度書くことで、小さなコードをもっと書く(例えば、' RungeKutta'、 'RungeKutta'、' RungeKutta'、 'RungeKutta'、シンプレクティック '...)。 あなたはまだタイプに関して一般的です。 – Acorbe