C ++関数テンプレートの紹介(テンプレート)

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」

おすすめ

転載: blog.csdn.net/rjszz1314/article/details/104347935