#include<iostream>usingnamespace std;/*
1.如果函数模板和普通函数都可以调用,优先普通函数
2.可以通过空模板参数列表来强调用函数模板
3.函数模板也可以发生重载
4.如果函数模板可以残生更好的匹配,有限调用函数模板
*/voidmyprint(int a,int b){
cout <<"myprint"<< endl;}template<classT>voidmyprint(T a, T b){
cout <<"template:myprint"<< endl;}template<classT>voidmyprint(T a, T b,T c){
cout <<"template2:myprint"<< endl;}voidtest01(){int a =10;int b =20;//myprint(a, b);//通过空模板参数列表,强制调用函数模板//myprint<>(a, b);//myprint(a, b, 1);//如果函数模板产生更好的匹配,优先调用函数模板char c1 ='a';char c2 ='v';myprint(c1, c2);}intmain(){test01();system("pause");return0;}
1.2.4普通函数和函数模板的区别
#include<iostream>usingnamespace std;//普通函数调用和发生隐式类型转换//函数模板用自动类型推导,不可以发生隐式类型转换//函数模板用显示指定类型,可以发生隐式类型转换intmyadd1(int a,int b){return a + b;}//函数模板template<classT>
T myadd2(T a, T b){return a + b;}voidtest01(){int a =10;int b =20;char c ='a';
cout <<myadd1(a, c)<< endl;
cout <<myadd2(a, b)<< endl;//cout << myadd2(a, c) << endl;//显示指定类型
cout <<myadd2<int>(a, c)<< endl;}intmain(){test01();system("pause");return0;}