【C++模版】显式实例化、显式具体化、隐式实例化

举报
王博Kings 发表于 2020/12/29 23:52:53 2020/12/29
【摘要】 目录 总体概念 隐式实例化: 显式实例化: 显示具体化: 详细理解  显示实例化 显示具体化  总体概念 隐式实例化: 在使用模板之前,编译器不生成模板的声明和定义实例。只有当使用模板时,编译器才根据模板定义生成相应类型的实例。 如:int i=0, j=1; swap(i, j);  //编译器根据参数i,j的类型隐式地生成swap<int>...

目录

总体概念

隐式实例化:

显式实例化:

显示具体化:

详细理解

 显示实例化

显示具体化


 总体概念

隐式实例化:

在使用模板之前,编译器不生成模板的声明和定义实例。只有当使用模板时,编译器才根据模板定义生成相应类型的实例。

如:int i=0, j=1;
swap(i, j);  //编译器根据参数i,j的类型隐式地生成swap<int>(int &a, int &b)的函数定义。
Array<int> arVal;//编译器根据类型参数隐式地生成Array<int>类声明和类函数定义。

显式实例化:

当显式实例化模板时,在使用模板之前,编译器根据显式实例化指定的类型生成模板实例。

如前面显示实例化(explicit instantiation)模板函数和模板类。其格式为:
template typename function<typename>(argulist);
template class classname<typename>;
显式实例化只需声明,不需要重新定义。编译器根据模板实现实例声明和实例定义。

显示具体化:

对于某些特殊类型,可能不适合模板实现,需要重新定义实现,此时可以使用显示具体化(explicite specialization)。

比如我们有个函数交换了50个,我们只想交换其中2个参数,就可以具体化后使用

有了基本概念,然后再继续学习

详细理解

 显示实例化

直接命令编译器创建特定的实例

template void Swap<int>(int, int);
 

意思:“使用Swap()模板生成int 类型的函数定义”

显示具体化

已经有了定义,我们重新依据定义然后再改一点点。相当于有了大类参考,我们修改一点点


  
  1. template <> void Swap<int>(int &, int &);
  2. template <> void Swap(int &, int &);

意思:“不要使用Swap()模板生成函数定义,应使用专门为int类型显示定义的函数定义”

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/95939237

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。