我是靠谱客的博主 聪慧小馒头,最近开发中收集的这篇文章主要介绍【C++模版】显式实例化、显式具体化、隐式实例化 总体概念详细理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

总体概念

隐式实例化:

显式实例化:

显示具体化:

详细理解

 显示实例化

显示具体化


 总体概念

隐式实例化:

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

如: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++模版】显式实例化、显式具体化、隐式实例化 总体概念详细理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部