模板实现了数据类型的泛化,但模板类型并不能提供类型的隐式转换:
T max(T a,T b)
{
return a > b ? a : b ;
}
void f ( int i , char c )
{
max ( i , i ) ; // ok
max ( c , c ) ; // ok
max ( i , c ) ; // error,无法匹配
max ( c , i ) ; // error
}
函数模板也可以重载:
#include <iostream>
using namespace std;
template <typename T> // 函数模板
T max(T a,T b)
{
return a > b ? a : b ;
}
int Max( const int a , const char b ) // 用普通函数重载函数模板
{
return a>b ? a : b ;
}
template <typename T> // 重载函数模板
T Max( const T a, const T b , const T c)
{
T t = Max(a, b) ;
return Max ( t, c ) ;
}
int main ( )
{
cout << " Max( 3, 'a' ) is " << Max( 3, 'a' ) << endl ; // 由系统提供隐式转换
cout << " Max(9.3, 0.5) is " << Max(9.3, 0.5) << endl ; // 编译器匹配函数模板T max(T a,T b)
cout << " Max(9, 5, 23) is " << Max(9, 5, 23) << endl ; // 编译器匹配函数模板T Max( const T a, const T b , const T c)
getchar();
}
/*
Max( 3, 'a' ) is 97
Max(9.3, 0.5) is 9
Max(9, 5, 23) is 23
*/
特定情况下,泛化的类型并不能适应特定的数据类型,所以还需要实现特定类型的特化。
-End-