ホームページ  >  記事  >  バックエンド開発  >  C++ 関数のクラス テンプレートと関数テンプレートの違いは何ですか?

C++ 関数のクラス テンプレートと関数テンプレートの違いは何ですか?

WBOY
WBOYオリジナル
2024-04-11 22:03:01825ブラウズ

C テンプレートには、クラス テンプレートと関数テンプレートが含まれます。クラス テンプレートを使用すると、さまざまなデータ型で使用できるクラスを作成できます。一方、関数テンプレートは、さまざまなデータ型の関数で使用できます。 2 つの主な違いは、クラス テンプレートは明示的にインスタンス化され、関数テンプレートは暗黙的にインスタンス化されることです。クラス テンプレートでは、型パラメーターはクラス定義全体で表示されますが、関数テンプレートでは、型パラメーターはシグネチャ内でのみ表示されます。

C++ 函数的类模板和函数模板有何区别?

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;
}

違い

クラス テンプレートと関数テンプレートの主な違いは次のとおりです。

  • インスタンス化メソッド: Classテンプレートは、a8093152e673feb7aba1828c43532094 表記法 (例: Arraybd43222e33876353aff11e13a7dc75f6) を使用して明示的にインスタンス化されますが、関数テンプレートは、関数を呼び出して型パラメーターを渡すことによって明示的にインスタンス化されます (例: maxbd43222e33876353aff11e13a7dc75f6(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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。