複数のデータ型を処理できる関数のオーバーロードについて学びました。これらは同じ名前ですが、コードを合理化してテンプレート化できれば素晴らしいと思います。この目的のために、C++ はコードの再利用性を大幅に向上させる関数テンプレート メカニズムを提供します。
関数テンプレートを使用すると、複数の仮パラメータをサポートする一般的な関数を作成できます。キーワードテンプレートを使用して、次の形式で定義します。
template<クラス型名1,クラス型名2...> 戻り値関数名(仮引数リスト列) テンプレート引数リスト{関数本体}
この一般的な形式で説明すると、最初の行の <class type name 1, class type name 2...> は宣言文です。 template はテンプレート関数を定義するキーワードです。テンプレートには複数の型が存在できます。前のものはクラス (または定義する型名) を使用します。その後、定義された関数テンプレートを続けて追加します。途中で他のステートメントを追加しないでください。追加しないと、エラーが報告されます。
以下、具体的な例を見てみましょう!
#include<iostream>usingnamespacestd;template<classT1,classT2>T1add(T1x,T2y){cout<<sizeof(T1)<<,<<sizeof(T2)< <t;returnx+y;}intmain(){cout<<add(10,20)<<endl;;cout<<add(3.14,5.98)<<endl;cout<<add('A',2 )<<endl;return0;}
上記は加算関数のテンプレートです。追加関数テンプレートが定義されており、その中の変数の型が T1 と T2 に置き換えられていることがわかります。
main 関数では、実際に呼び出すときに 3 回呼び出し、3 つの異なる型を渡します。テンプレート関数の T1 型と T2 型は、渡された実際の型に応じて特定の型に変更されます。この変換は と呼ばれます。テンプレート変更のインスタンス。
次にプログラムを実行すると、毎回どのような型 T1 と T2 が呼び出されるのか、それらのバイト数、および合計結果がわかります。ランニング効果は以下の通りです。
コードを 1 行ずつ理解して、自分で実験を完了できます。