C++ 構文での関数テンプレートの柔軟な使用

WBOY
リリース: 2024-06-02 14:18:56
オリジナル
769 人が閲覧しました

C++ 構文での関数テンプレートの柔軟な使用

C++ 構文での関数テンプレートの柔軟な使用

関数テンプレートは、さまざまなデータ型に使用できるコードのセットを作成できる C++ の強力な機能です。これにより、コードの再利用性が向上し、より多用途で保守しやすいコードを作成できるようになります。

構文

関数テンプレートの構文は次のとおりです:

template<typename T>
T myFunction(T a, T b);
ログイン後にコピー

ここで:

  • template は、テンプレート関数が宣言されていることを意味します。
  • template 表示正在声明模板函数。
  • <typename T> 指定模板参数为类型参数。
  • T myFunction(T a, T b) 是函数声明,其中 T 是模板参数类型。

示例

让我们创建一个函数模板来计算两个数字的最大值:

template<typename T>
T max(T a, T b) {
    if (a > b) {
        return a;
    } else {
        return b;
    }
}
ログイン後にコピー

此函数模板可以用于任何数据类型,例如:

int x = max(1, 2); // 最大值为 2
double y = max(3.14, 1.618); // 最大值为 3.14
ログイン後にコピー

类型约束

有时,您可能需要指定模板参数必须满足的某些约束。这可以使用 typename 关键字前面的 classtypename 关键字完成,如下所示:

template<typename T>
requires std::is_integral_v<T> // 约束 T 为整数类型
T myFunction(T a, T b);
ログイン後にコピー

编译时多态性

函数模板在编译时解析,这意味着模板参数在运行时不可用。这允许编译器生成特定于给定数据类型的高效代码版本。

实战案例

考虑以下代码,它将数组中的所有元素加起来:

int sumArray(int arr[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum;
}
ログイン後にコピー

使用函数模板,我们可以为不同的数据类型创建通用的 sumArray<typename T> テンプレート パラメータを型パラメータとして指定します。

T myFunction(T a, T b) は関数宣言であり、T はテンプレート パラメーターの型です。

2 つの数値の最大値を計算する関数テンプレートを作成しましょう:

template<typename T>
T sumArray(T arr[], int size) {
    T sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum;
}
ログイン後にコピー

この関数テンプレートは、任意のデータ型に使用できます。たとえば、:

int arr1[] = {1, 2, 3, 4, 5};
int sum1 = sumArray(arr1, sizeof(arr1) / sizeof(int)); // 15

float arr2[] = {1.2, 3.4, 5.6, 7.8, 9.1};
float sum2 = sumArray(arr2, sizeof(arr2) / sizeof(float)); // 27.1
ログイン後にコピー
🎜🎜型制約 🎜🎜🎜 場合によっては、テンプレート パラメーターが満たさなければならない特定の制約を指定する必要がある場合があります。これは、以下に示すように、class または typename キーワードを typename キーワードの前に使用して実行できます。 🎜関数テンプレートはコンパイル時に解決されます。つまり、テンプレート パラメーターは実行時には使用できません。これにより、コンパイラは、特定のデータ型に固有のコードの効率的なバージョンを生成できます。 🎜🎜🎜実践例🎜🎜🎜配列内のすべての要素を合計する次のコードを考えてみましょう: 🎜rrreee🎜関数テンプレートを使用して、さまざまなデータ型に対応する汎用の sumArray 関数を作成できます: 🎜 rrreee🎜This整数、浮動小数点数、または加算をサポートするその他のデータ型を合計することができます。 🎜rrreee🎜🎜結論🎜🎜🎜関数テンプレートは、再利用性が高く効率的なコードを作成できる強力なツールです。関数テンプレートの構文、型制約、コンパイル時のポリモーフィズムを理解すると、C++ でこの機能を最大限に活用できるようになります。 🎜

以上がC++ 構文での関数テンプレートの柔軟な使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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