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

WBOY
リリース: 2024-04-11 22:03:01
オリジナル
833 人が閲覧しました

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テンプレートは、<> 表記法 (例: 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート