概述
目录
总体概念
隐式实例化:
显式实例化:
显示具体化:
详细理解
显示实例化
显示具体化
总体概念
隐式实例化:
在使用模板之前,编译器不生成模板的声明和定义实例。只有当使用模板时,编译器才根据模板定义生成相应类型的实例。
如: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 类型的函数定义”
显示具体化
已经有了定义,我们重新依据定义然后再改一点点。相当于有了大类参考,我们修改一点点
template <> void Swap<int>(int &, int &);
template <> void Swap(int &, int &);
意思:“不要使用Swap()模板生成函数定义,应使用专门为int类型显示定义的函数定义”
最后
以上就是聪慧小馒头为你收集整理的【C++模版】显式实例化、显式具体化、隐式实例化 总体概念详细理解的全部内容,希望文章能够帮你解决【C++模版】显式实例化、显式具体化、隐式实例化 总体概念详细理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复