码迷,mamicode.com
首页 > 其他好文 > 详细

函数模板的特化

时间:2015-07-15 09:25:12      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:c++

函数模板的特化
该定义中一个或多个模板形参的实际类型或实际值是指定的。特化形式如下:
关键字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;
}
  

版权声明:本文为博主原创文章,未经博主允许不得转载。

函数模板的特化

标签:c++

原文地址:http://blog.csdn.net/yusiguyuan/article/details/46887977

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!