编辑代码

#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;
}