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
关键字前面的 class
或 typename
关键字完成,如下所示:
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 サイトの他の関連記事を参照してください。