次のようなクラステンプレートがある場合
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()
、上記のコードはコンパイラ エラーを生成しません。