C++ Template学习笔记之函数模板(6)——模板显式特化

本文介绍了C++中模板显式特化的概念与使用方法。通过示例代码详细展示了如何为特定类型提供更高效的函数实现,以优化通用模板的性能。

我们并不总是能够写出对所有可能被实例化的类型都是最合适的函数模板。在某些情况下,我们可能想利用类型的某些特性,来编写一些比模板实例化的函数更高效的函数。在有些时候,一般性的模板定义对于某种类型来说并不适用,这时我们必须为函数模板实例化提供特化的定义。

模板显式特化定义(explicit specialization definition)中,先是关键字template和一对尖括号<>,然后是函数模板特化的定义。该定义指出了模板名、被用来特化模板的模板实参,以及函数参数表和函数体。如:

// max.h
template <class Type>
Type Max(Type t1,Type t2)
{
return (t1>t2 ? t1 : t2);
}

// const char*显式特化:覆盖了来自通用模板定义的实例

typedef const char *PCC;
template<> PCC Max< PCC >( PCC s1, PCC s2 )
{
return (strcmp(s1,s2)>0 ? s1 :s2);
}

// user.c
int main()
{
//调用实例:int Max< int >( int, int );
int i =Max( 10, 5 );
// 调用显式特化:const char* Max< const char* >( const char*, const char* );
const char *p = Max( "hello", "world" );
cout<<"i: "<<i<<" "<<"p: "<<p<<endl;

return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值