函数模板的特化
该定义中一个或多个模板形参的实际类型或实际值是指定的。特化形式如下:
关键字template后面接一对空的尖括号(< >);
再接模板名和一对尖括号,及括号中指定这个特化定义的模板形参;
函数形参表
函数体
template<>
int compare<const char *>(const char *const &v1, const char *const &v2)
{
return strcmp(v1, v2);
}
特化的声明必须与对应的模板相匹配。
当调用compare函数的时候,传给它两个字符指针,编译器将调用特化版本。编译器将为任意其他实参类型调用泛型版本。
const char *cp1 = "world", *cp2 = "hi";
int i1, i2;
compare(cp1, cp2);//调用特化版本
compare(i1,i2)//调用的版本type为int
template <typename T>
int compare(const T
&v1, const T &v2)
{
if (v1 < v2)
{
return -1;
}
if (v2 < v1)
{
return 1;
}
return 0;
}
template<>
int compare<const char *>( const char * const &v1, const char * const &v2)
{
return strcmp(v1, v2);
}
int _tmain(int argc,
_TCHAR* argv[])
{
const char *cp1
= "world", *cp2 = "hi";
int i1 = 2, i2 = 1;
int ret1, ret2;
ret1 = compare(cp1, cp2);
ret2 = compare(i1, i2);
printf( "ret 1 is %d, ret2 is %d\r\n" , ret1, ret2);
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。