次のようなクラステンプレートがある場合
template<class Type>
class Field {
....
};
Fieldさて、クラスのオブジェクトを次のように宣言した場合
Field <vector> velocityField;
したがって、どのメンバー関数がvector私のフォームに継承されますかvelocityField
次のようなクラステンプレートがある場合
template<class Type>
class Field {
....
};
Fieldさて、クラスのオブジェクトを次のように宣言した場合
Field <vector> velocityField;
したがって、どのメンバー関数がvector私のフォームに継承されますかvelocityField
テンプレート パラメーターを使用すると、コンパイラーは、具体的な型の宣言を見つけたときに、ジェネリック テンプレート パラメーター自体の置換を実行できます。あなたは何も継承していません。
Typeクラスのどこかで使用するFieldと、それに応じて置換が実行され、参照されたメソッドのみがコンパイラによって検索されます。
template<class Type>
class Field {
void Foo()
{
Type instanceOfType;
instanceOfType.clear();
}
void NeverCalledMethod()
{
Bar(); //bar doesn't exist
}
};
Field<vector> aField; // here the type Field<vector> is instantiated for the first time.
aField.Foo(); // only here the template class Foo() method is included by the compiler.
特定の状況 (例:Bar()の本体に有効な構文がある) では、Bar()呼び出されなければ、コンパイルは本体のエラーの影響を受けません。呼び出されることはなく、コンパイラはそれを解析できますが、実際にコンパイルしようとはしないためBar()、上記のコードはコンパイラ エラーを生成しません。