#include<iostream>
using namespace std;
int myAdd01(int a,int b) //普通函数,类型是int型
{
return a+b;
}
template<typename T>
T myAdd02(T a,T b)
{
return a+b;
}
int main()
{
int a=10,b=20;
char c='c'; //Ascll 码中 a->97 c->99
cout<<myAdd01(a,c)<<endl; //结果是109
//如果是普通函数 你设定了类型它就回自动类型推导
// cout<<myAdd02(a,c)<<endl; 报错因为你传入两个不同类型 编译器不会给你推导
cout<<myAdd02<int>(a,c)<<endl; //如果你显示指定类型就会自动推导为int型
}
#include<iostream>
using namespace std;
//普通函数和函数模板(重载)的调用
void myPrint(int a,int b)
{
cout<<"普通函数的调用\n";
}
template<typename T>
void myPrint(T a,T b)
{
cout<<"函数模板的调用\n";
}
template<typename T>
void myPrint(T a,T b,T c)
{
cout<<"重载的函数模板的调用\n";
}
void Case1()
{
//如果是直接调用两个函数 因为是重载的,所以编译器会优先调用普通函数
myPrint(10,20);
}
void Case2()
{
//通过空模板形式跟编译器表示你要调用的是模板函数
myPrint<>(10,20);
}
void Case3()
{
//函数模板也是可以进行重载的
myPrint(10,20,30);
}
void Case4()
{
//如果函数模板更好匹配数据,优先调用模板
//比如普通函数是int型,但是我传的参数是char型,与其普通函数int转char
//不如直接用函数模板
char a='c';
char b='f';
myPrint(a,b);
}
int main()
{
Case1();
cout<<"*****\n";
Case2();
cout<<"*****\n";
Case3();
cout<<"*****\n";
Case4();
cout<<"*****\n";
}