「函数模板」的形式:
template <class 类型参数1,class 类型参数2,...>
返回值类型 模板名 (形参表)
{
函数体
};
template 就是模板定义的关键词,T 代表的是任意变量的类型。
定义Swap函数:
template <class T>
void Swap(T & x,T & y)
{
T tmp = x;
x = y;
y = tmp;
}
那么定义好「函数模板」后,在编译的时候,编译器会根据传入 Swap 函数的参数变量类型,自动生成对应参数变量类型的 Swap 函数:
int main()
{
int n = 1,m = 2;
Swap(n,m); //编译器自动生成 void Swap(int & ,int & )函数
double f = 1.2,g = 2.3;
Swap(f,g); //编译器自动生成 void Swap(double & ,double & )函数
return 0;
}
上面的实例化函数模板的例子,是让编译器自己来判断传入的变量类型,那么我们也可以自己指定函数模板的变量类型,具体代码如下:
int main()
{
int n = 1,m = 2;
Swap<int>(n,m); // 指定模板函数的变量类型为int
double f = 1.2,g = 2.3;
Swap<double>(f,g); // 指定模板函数的变量类型为double
return 0;
}