もう少し装飾すると、これは通常ダックタイピングと呼ばれ、要点は、あるテンプレートタイプでインスタンス化されたときに一部のメンバー関数が適用される「クラスパターン」を記述できることです。 2 番目のテンプレート タイプを使用し、実際に呼び出してコンパイルする必要があるものだけを必要とすることで、一般的な操作になる操作のコードを大幅に減らすことができます。
すべてのメンバー関数をコンパイルする必要がないことにより、実際にコンパイルされる関数の静的型チェックのすべての利点を得ることができます。
たとえば、あなたが持っていたと想像してください:
template <typename E>
class myContainer {
// Imagine that constructors, setup functions, etc. were here
void sort(); // this function might make sense only if E has an operator< defined
E max(); // compute the max element, again only makes sense with a operator<
E getElement(int i); // return the ith element
E transmogrify(); // perhaps this operation only makes sense on vectors
};
次に、あなたは持っています
// sort() and getElement() makes total sense on this, but not transmogrify()
myContainer<int> mci;
// sort and max might not be needed, but getElement() and transmogrify() might
myContainer<vector<double>> mcvd;