函数模板
函数模板是通用的函数描述,他们使用泛型来定义函数,其中的泛型可用具体的类型(如int和double)替换。通过将类型作为参数传递给模板,可是编译器生成该类型的函数。由于模板允许以泛型(而不是具体类型)的方式编写程序,因此有时也被称为通用编程。由于类型是用参数表示的,因此模板特性有时也被称为参数化类型。
函数模板允许以任意类型的方式来定义函数。
temeplate<typeName AnyType>
void Swap(AnyType &a,AnyType &b)
{
AnyType temp;
temp=a;
a=b;
b=temp;
}
第一行指出,要建立一个模板,并将类型命名为AnyType.关键字template和typename是必需的,除非使用关键字lass代替typename.另外,必须使用尖括号。余下代码描述了交换两个AnyType值的算法。模板并不创建函数,而只是告诉编译器如何定义函数。
类模板:
temeplate<class AnyType>
void Swap(AnyType &a,AnyType &b)
{
AnyType temp;
temp=a;
a=b;
b=temp;
}
重载模板: 需要对多个不同类型使用同一种算法的函数时,可使用模板。然而并非所有的类型都使用相同的算法。为满足这种需求,可以像重载常规函数定义那样重载模板定义。(特征标必须不同) #include template void Swap(T &a, T &b);
template<typename T>
void Swap(T *a, T *b, int n);
void Show(int a[]);
const int Lim = 8;
int main()
{
using namespace std;
int i = 10, j = 20;
cout << "i,j = " << i << "," << j << endl;
cout << "using compiler-generated int swapper:\n";
Swap(i, j);
cout << "Now i,j = " << i << "," << j << endl;
int d1[Lim] = { 0,7,0,4,1,7,7,6 };
int d2[Lim] = { 0,7,2,0,1,9,6,9 };
cout << "original arrays:\n";
Show(d1);
Show(d2);
Swap(d1, d2, Lim);
cout << "Swapped arrays:\n";
Show(d1);
Show(d2);
return 0;
}
template<typename T>
void Swap(T &a, T &b)
{
T temp;
temp = a;
a = b;
b = temp;
}
template<typename T>
void Swap(T a[], T b[], int n)
{
T temp;
for (int i = 0; i < n; i++)
{
temp = a[i];
a[i] = b[i];
b[i] = temp;
}
}
void Show(int a[])
{
using namespace std;
cout << a[0] << a[1] << "/";
cout << a[2] << a[3] << "/";
for (int i = 4; i < Lim; i++)
cout << a[i];
cout << endl;
}