函数模板
定义:
- 函数模板是那些被参数化的函数,它们代表一个函数家族。该函数可以被多种不同的类型调用。
//example:
template <typename T> //typename:也可以使用class代替
inline T const& max(T const& a,T const& b)
{
//寻找最大值
return a<b?b:a;
}
重载函数模板
- 重载:相同的函数名称可以具有不同的函数定义
例如:
void display_num(int num);
void display_num(double num);
// 根据num的类型自动匹配最合适的函数
- 重载函数模板
例如:
//定义一个非函数模板函数,求两个int类型的最大值
inline int const& max(int const& a,int const& b)
{
return a<b?b:a;
}
//函数模板函数,求两个任意类型的最大值
template <typename T>
inline T const& max(T const& a,T const& b)
{
return a<b?b:a;
}
//求三个任意类型的最大值
template <typename T>
inline T const& max(T const& a.T const& b,T const& c)
{
return ::max(::max(a,b),c);
}
int main()
{
::max(7,42,25);// 调用具有三个参数的模板
::max('a','k');//调用max<char>
::max(7,43); //未调用函数模板,调用的是int 重载的非模板函数
::max('a',22); //调用int重载的非模板函数
return 0;
}
以上程序定义了一个函数模板T const& max和一个重载函数int const& max.当模板和重载冲突的时候 ,就优先调用重载
函数模板只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模板,这就是函数模板相对于函数重载的缺陷。