把处理不同类型的公共逻辑抽象成函数,就得到了函数模板。
模板定义本身不参与编译,而是编译器根据模板的用户使用模板时提供的类型参数生成代码,再进行编译,这一过程被称为模板实例化。用户提供不同的类型参数,就会实例化出不同的代码。
函数模板的声明
template<typename T>
bool isEqual(T a,T b);
函数模板的定义
template<typename T>
bool isEqual(T a,T b)
{
if(a>b||a<b)
{
return false;
}
return true;
}
函数模板特化
有时通用的函数模板不能解决个别类型的问题,我们必须对此进行定制,这就是函数模板的特化。函数模板的特化必须把所有的模版参数全部指定。
template<>
bool isEqual(char* a,char* b)
{
return strcmp(a,b)==0;
}
调用
void test13()
{
cout<<isEqual(20,20)<<endl;//推断T的类型为int
cout<<isEqual(10.2,20.3)<<endl;//推断T的类型为double
cout<<isEqual("hello","hello")<<endl;//推断T的类型为char*
}