#include <iostream>
using namespace std;
/**************泛型模板*******************/
/*
作用:将类型抽象化
template<typename F>
F Fun(F a)
模板定义和函数定义应该成对出现
*/
/*
定义模板:template<typename T> 或者 template<class T> 作用相同(不用分号)
typename,class这两个关键字在模板里作用完全一样
T 为模板名
定义函数:T Fun(T a)
{
return a;
}
使用:Fun<int>(5); //int b = Fun<int>(5);
*/
/**************模板参数*******************/
/*
定义模板:template<typename T , int x> 或者 template<class T, int x>
int x就是模板参数
定义函数:T Fun(T a) //定义时:不用管模板参数
{
return a * x;
}
使用:Fun<int ,8>(5); //int b = Fun<int ,8>(5); //使用时:必须加上模板参数
*/
//实例:模板
template<class T>
T Fun(T a) //抽象化函数定义
{
return a;
}
//实例:模板参数
template<class F , int x>
F Fun(F a) //抽象化函数定义
{
return a * x;
}
int main()
{
int b = Fun<int>(7); //使用泛型函数
cout << b << endl; // 7
int c = Fun<int , 8>(2);
cout << c << endl; //16
return 0;
}