注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Kandy

长风破浪会有时,直挂云帆济沧海!

 
 
 

日志

 
 

隐式实例化,显示实例化,显示具体化  

2009-05-26 16:55:06|  分类: C++知识点 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

隐式实例化,显示实例化,显示具体化统称为具体化,他们的相同之处在于,他们表示的都是使用具体函数的类型定义,而不是通用描述。

对于模板函数,编译器会通过对这个模板含数的引用生成一个含数的实例,这通常叫隐式实例化,例如下面的函数模板

隐式实例化,显示实例化,显示具体化 - KKnight - 凌箫夜曲template <class T>

隐式实例化,显示实例化,显示具体化 - KKnight - 凌箫夜曲void Swap(T &a,T &b);

而相对于隐式实例化,则可以自己编写显示实例化来说明:

隐式实例化,显示实例化,显示具体化 - KKnight - 凌箫夜曲template void Swap<int>(int &,int &);

隐式实例化,显示实例化,显示具体化 - KKnight - 凌箫夜曲void Swap<int>(int &,int &)

{

//实现显示具体化的代码

}

这个只是为了防止代码膨胀.

对于显示具体化的理解是,为了实现一种不同于模板函数定义的一种实现,上述函数对大多数类型没有问题,但是对char   *就不行了,   因为对char   *的交换实际上只交换了两个指针,这应该不是我们想要的,于是我们想当参数为char*的时候为它特别指定一种算法,这时显示具体化就有用了:  

隐式实例化,显示实例化,显示具体化 - KKnight - 凌箫夜曲  template<>   

隐式实例化,显示实例化,显示具体化 - KKnight - 凌箫夜曲  swap(char   *   &x,   char   *   &y)   

  {   

      char   temp[1000];   //简化了   

      strcpy(temp,   x);   

      strcpy(x,   y);   

      strcpy(y,   temp);   

  }   

同一个编程单元中是不允许同时出现"显示实例化"与"显示具体化"的,看来这也是编译器无法区分二者的.

  评论这张
 
阅读(210)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017