C ++テンプレートの簡単な学習

ジェネリックプログラミング:関数テンプレートとクラステンプレート

関数テンプレート:

*template   <typename T>		//typename也可使用class 
void func(T &a){
    
    }*

テンプレートを使用するには、次の2つの方法があり
ます。1。自動型推定

func(a)
2、显式指定类型
func<int>(a)

テンプレートの目的は、コードの再利用性を向上させ、型をパラメーター化することです。
注:
・自動型導出、使用する前に一貫したデータ型Tを導出する必要があります
・テンプレートは、使用する前にTのデータ型を決定する必要があります利用される

通常の関数とテンプレートの違い:
自動型推論には暗黙的な型変換がなく、
明示的な型には暗黙的な型変換があります

通常関数とテンプレート関数の呼び出し規則
・関数テンプレートと通常関数の両方を実装できる場合は、通常関数
が最初に呼び出され
ます。関数テンプレートは、空のテンプレートパラメータリストから強制的に呼び出すことができます。関数テンプレートはオーバーロードすることもできます
。関数テンプレートがより多くの一致を生成できる場合は、最初に関数テンプレートを呼び出します


テンプレートの制限:テンプレートは全能ではありません。特定のデータ型を特定の方法で実装する必要があります。

·利用具体化的模板,可以解决自定义类型的通用化

例えば:

//不同类型排序模板 

#include <iostream>
using namespace std;

template<typename T>
void mySwap(T &a, T&b)
{
    
    
	T temp = a;
	a = b;
	b = temp;
 } 

template<class T>
void mySort(T arr[], int len) 
{
    
    
	for (int i = 0; i < len; i++){
    
    
		int max = i;
		for (int j = i + 1; j < len; j ++){
    
    
			if (arr[max] < arr[j]){
    
    
				max = j;
			}
		}
		if (max != i){
    
    
			mySwap(arr[max], arr[i]);
		}
	}
}

template<class T>
void printArray(T arr[], int len)
{
    
    
	for (int i = 0; i < len; i ++)
	{
    
    
		cout << arr[i] << " ";
	}
	cout <<endl;
}

void test1()
{
    
    
	char charArr[] = "fhdjkhfacb";
	int num = sizeof(charArr);
	mySort(charArr, num);
	printArray(charArr, num);
}

void test2()
{
    
    
	int intArr[] = {
    
    4,455,345,22,4,55,6564,35,3,6757};
	int num = sizeof(intArr) / sizeof(int);
	mySort(intArr, num);
	printArray(intArr, num);
}

int main()
{
    
    
	test1();
	test2();
	system ("pause");
	return 0;
}

*ダークホースプログラマーc ++コース学習演習

おすすめ

転載: blog.csdn.net/Fighting_gua_biu/article/details/113535334