//函数模板定义--数据类型做参数
#include<iostream>
using namespace std; /*
函数模板声明
1.函数模板定义由模板说明和函数定义组成,并且一个模板说明对应一个函数定义
2.模板说明的类属参数必须在函数定义中至少出现一次
3.函数参数表中可以使用类属类型参数,也可以使用一般类型参数
*/ /*
template关键字告诉c++编译器现在要进行泛型编程
typename或者class告诉c++编译器T是一个数据类型,不要进行语法检查
typename和class完全可以互相替换
*/
template<typename T>//也可以写成template<class T>
void myswap(T &a, T &b){
T c = a;
a = b;
b = c;
};
//void Print(T &a,T &b){
// cout << "a=" << a << "\nb=" << b << endl;
//}
//报错:一个模板说明只能对应一个函数定义,想再定义一个函数,必须再写一个模板声明 template<class T>
void Print(T &a, T &b){
cout << "a=" << a << "\nb=" << b << endl;
} //多参数的函数模板
template<typename T1,typename T2>
//这种定义当调用函数时就会报错 MySort(a);
//模板说明的类属参数必须在函数定义中至少出现一次
void MySort(T1 a){
cout << "aaa" << endl;
} template<typename T>
void Getnum(T a,int b){
cout << "a=" << a << ";\nb="<<b << endl;
} void main(){
int a=;
int b = ;
//泛型编程函数的使用方法1---自动类型推导
myswap(a, b);
Print(a, b);
//泛型编程函数的使用方法2---显式具体类型调用
myswap<int>(a, b);
Print(a, b);
//MySort(a); 报错 : error C2783: “void MySort(T1)”: 未能为“T2”推导 模板 参数
cout << "----------------" << endl;
Getnum(a, );
system("pause");
}
04-20 22:41