C++ 構文での関数テンプレートの柔軟な使用
関数テンプレートは、さまざまなデータ型に使用できるコードのセットを作成できる C++ の強力な機能です。これにより、コードの再利用性が向上し、より多用途で保守しやすいコードを作成できるようになります。
構文
関数テンプレートの構文は次のとおりです:
template<typename T> T myFunction(T a, T b);
ここで:
template
は、テンプレート関数が宣言されていることを意味します。 template
表示正在声明模板函数。<typename t></typename>
指定模板参数为类型参数。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></typename>
テンプレート パラメータを型パラメータとして指定します。
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 サイトの他の関連記事を参照してください。