-1

次のようなクラステンプレートがある場合

template<class Type>
class Field {
....
}; 

Fieldさて、クラスのオブジェクトを次のように宣言した場合

Field <vector> velocityField;

したがって、どのメンバー関数がvector私のフォームに継承されますかvelocityField

4

1 に答える 1

2

テンプレート パラメーターを使用すると、コンパイラーは、具体的な型の宣言を見つけたときに、ジェネリック テンプレート パラメーター自体の置換を実行できます。あなたは何も継承していません。

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()、上記のコードはコンパイラ エラーを生成しません。

于 2016-11-13T10:55:28.663 に答える