C ++関数テンプレートの紹介
関数テンプレートの紹介
一般的に言って、関数を書くとき、そのパラメータータイプが決定されます。たとえば、次の関数プロトタイプ:
void Swap(int &a,int &b);
関数プロトタイプからわかるように、これはスワップ関数です。機能は、aとbの入力値を交換することです。
ただし、渡されたパラメーターはすべてint型であるため、交換できるint値は2つだけであることがわかります。
したがって、問題は次のとおりです。2つのdouble変数を渡す場合、別の関数を作成する必要があります(もちろん、関数のオーバーロードを使用すると、C ++のポリモーフィズムを実際に反映できます)が、他の型についてはどうでしょうか。long、sort、long long ...
したがって、このような関数を実現するために別の概念テンプレートを導入する必要があります。そのため、すべてのジェネリックパラメーターの入力を完了する関数のみを記述します。
関数テンプレートkeyword-template
関数テンプレートのキーワードは-template
template <typename AnyType>
void Swap(AnyType &a,AnyType &b)
{
AnyType temp;
temp=a;
a=b;
b=temp;
}
上記のコードからわかるように、ジェネリック型はキーワードテンプレートによって定義され、キーワードtypenameによって定義されます。ここで、AnyTypeは単なる名前であり、「T」などのC ++の正規の名前です(この名前もより一般的です)。 ) こともできます
template <typename T>
例
次に、例を通して、テンプレート関数の定義と使用法を確認します。
#include<iostream>
using namespace std;
template <typename T>
void Swap(T &a,T &b);
int main()
{
int i=10;
int j=20;
cout<<"i,j="<<i<<","<<j<<".\n";
cout<<"Using compiler generated int swapper:\n";
Swap(i,j);
cout<<"Now i,j="<<i<<","<<j<<".\n";
double x=24.5;
double y=81.7;
cout<<"x,y="<<x<<","<<y<<".\n";
cout<<"Using compiler generated double swapper:\n";
Swap(x,y);
cout<<"Now x,y="<<x<<","<<y<<".\n";
return 0;
}
template <typename T>
void Swap(T &a,T &b)
{
T temp;
temp=a;
a=b;
b=temp;
}
実行後、出力:
Swap関数が2回呼び出され、1つはint型、もう1つはdouble型であることがわかりますが、1つの関数しか記述されていないため、多くのコードが節約されます。
—————————————————————————————————————————————————— ——————————————————
参考書:「C ++ PrimerPlus6th」