C テンプレートには、クラス テンプレートと関数テンプレートが含まれます。クラス テンプレートを使用すると、さまざまなデータ型で使用できるクラスを作成できます。一方、関数テンプレートは、さまざまなデータ型の関数で使用できます。 2 つの主な違いは、クラス テンプレートは明示的にインスタンス化され、関数テンプレートは暗黙的にインスタンス化されることです。クラス テンプレートでは、型パラメーターはクラス定義全体で表示されますが、関数テンプレートでは、型パラメーターはシグネチャ内でのみ表示されます。
C
C テンプレートのクラス テンプレートと関数テンプレートは、次のような再利用コードを作成できる強力な言語機能です。さまざまなデータ型で使用されます。 C では、クラス テンプレートと関数テンプレートの 2 種類のテンプレートが提供されます。
クラス テンプレート
クラス テンプレートを使用すると、さまざまなデータ型に使用できるクラスを作成できます。つまり、整数、浮動小数点数、その他のカスタム クラスなどのさまざまなデータ型を持つオブジェクトの作成に使用できるブループリントを作成できます。
template <typename T> class Array { public: Array(int size) : size(size), data(new T[size]) {} ~Array() { delete[] data; } T& operator[](int index) { return data[index]; } private: int size; T* data; };
関数テンプレート
関数テンプレートを使用すると、さまざまなデータ型で使用できる関数を作成できます。同様に、さまざまなパラメーターの型と戻り値の型を持つ関数を作成するために使用できるテンプレートを作成できます。
template <typename T> T max(T a, T b) { return (a > b) ? a : b; }
違い
クラス テンプレートと関数テンプレートの主な違いは次のとおりです。
<>
表記法 (例: Array<int>
) を使用して明示的にインスタンス化されますが、関数テンプレートは、関数を呼び出して型パラメーターを渡すことによって明示的にインスタンス化されます (例: max<int>(3, 5)
) は暗黙的にインスタンス化されます。 実際的なケース
クラス テンプレート: 2 つの異なる型の値を格納する Pair
クラス テンプレートを作成します。 。
template <typename K, typename V> class Pair { public: Pair(K key, V value) : key(key), value(value) {} K getKey() { return key; } V getValue() { return value; } private: K key; V value; };
Pair
クラス テンプレートを使用して、整数キーと文字列値を格納する Pair
オブジェクトを作成します。
Pair<int, string> pair(1, "C++"); cout << pair.getKey() << " " << pair.getValue() << endl; // 输出:1 C++
関数テンプレート: 2 つの異なるタイプの値の順序を交換するための swap
関数テンプレートを作成します。
template <typename T> void swap(T& a, T& b) { T temp = a; a = b; b = temp; }
swap
関数テンプレートを使用して 2 つの整数を交換します。
int x = 1; int y = 2; swap(x, y); // 互换 x 和 y 的值 cout << x << " " << y << endl; // 输出:2 1
以上がC++ 関数のクラス テンプレートと関数テンプレートの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。