函数模板和类模板的实例化和具体化

2023-11-06

一.函数模板

1.显示实例化(explicit instantiation)和显示具体化(explicit specialization)的区别:

(1) 形式上:

显示实例化:  template  void  Swap<int> (int ,int);

显示具体化:  template <> void Swap<int> (int,int);

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

从中我们可以看出区别在于前者以 template 打头,后者以template<> 打头

(2) 含义上:

显示实例化:使用 Swap() 模板生成 int 类型的函数定义,即使用函数模板,用具体的 int 来代替函数模板中的泛型类型,这样就不用额外写函数定义。

显示具体化:不使用Swap()模板生成函数定义,而使用专门的、独立的(即显示具体化所定义的函数)函数定义来显示的为 int 类型生成函数定义,显示具体化要有额外的函数定义部分。

2.隐式实例化(implicit instantiation)比较简单,它是在函数调用时根据参数的具体类型来确定函数模板中的泛型类型。如:

char  ch1,ch2;

……

Swap(ch1,ch2);//  此时用char 类型来替换函数模板中的通用类型

 

3.显示实例化,隐式实例化和显示具体化统称为具体化(specialization),它们的相同之处在于都是用具体的类型的函数定义,而不是通用描述。

二.类模板

1. 显示实例化和显示具体化的区别

(1)形式上:

显示实例化:      template  class  ArrayTp<string,10> ;

显示具体化:      template  <class   T, int  n>

                           class   ArrayTp

                           {

                               ……

                               ……

                            };

                             template  <>  class  ArrayTp<string,10>

                            {

                              ……

                              ……

                            };

从中可以看出,二者的区别类似于函数模板中二者的区别,一个以template 打头,一个以template <> 打头,但都要有class 关键字,因为这是类模板。

(2) 含义上:

显示实例化用通用的类模板ArrayTp生成具体类型(如string)的类定义;

显示具体化不使用类模板定义,而使用自己专用的类定义。

2.部分具体化(partial specialization)

部分具体话,是指部分限制模板的通用性。

如 有以下模板定义:

template  <class T1, class T2>

class   Pair

{

   ……

};

可以这样实现部分具体化:

 template <class T2>  class Pair<string,T2>

 {

          ……

 };

template 后面的<> 出现的是未具体化的类型参数。若两个参数都具体化了,则<>内为空,就变成了显示具体化。

3.隐式实例化比较简单,它是在声明对象时根据具体的类型来代替类模板中的通用类型。如: ArrayTp<double,10>  aver;



FROM: http://www.2cto.com/kf/201305/208942.html


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数模板和类模板的实例化和具体化 的相关文章

  • 一个常用的 C++ 学习、了解平台特性和数据类型的小工具(源代码)

    这是一段C 代码 运行后会输出不同数据类型在当前平台下所占字节数 最大值和最小值等信息 具体解释如下 首先 包含两个头文件 iostream 输入输出流的标准头文件 用于标准输入输出 包含定义在 std 命名空间的 cout 和 endl
  • SpringCloud Alibaba之Ribbon 修改和自定义负载均衡策略

    Ribbon 简介 Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具 它基于Netflix Ribbon实现 通过Spring Cloud的封装 可以让我们轻松地将面向服务的REST模版请求自动转换成客户
  • 文件服务器 选择,文件服务器选择

    文件服务器选择 内容精选 换一换 从本地上传日志文件 是指从浏览器所在机器选择日志文件并上传 目前只支持选择 log的日志文件 如果日志文件中包含其他格式文件 则导入时会提示格式错误 如图2所示 单击Upload 则只会上传 log的日志文
  • request.getParameterNames();

    详情查询 J2EE 1 3 1 API
  • 第2章 信息系统集成及服务管理

    本章考试分值 1 2 分 主要考点 1 ITSS 信息技术服务标准 2 信息系统设计 一 信息系统集成及服务管理体系 1 信息系统集成及服务管理体系 了解 信息系统集成及服务是一个范围相当广泛的概念 所有以满足企业和机构的业务发 展所带来的
  • Android平台安全(一)

    刚好五一了 已经过去两三天了 今天接触到了关于Android安全的一些东西 记录下来 Android安全我大致分三个部分来说明 今天我就先说第一个部分 在典型的场景中 安全主要用于解决一下4类需求 保密 鉴别 认证 完整性 不可以否认性 安

随机推荐

  • IncrediBuild 联合编译

    01 基本信息 官网 https www incredibuild com Make 和其他构建工具示例 要使用IncrediBuild 必须有License 可以免费申请试用版本的license 可以到 https www incredi
  • 【H5】两种加密解密方法:

    H5 两种加密解码方法 encodeURI 加密 decodeURI 解密 加密成base64编码格式 btoa 加密 atob 解密 实现代码如下
  • 【C语言】计数排序

    一 算法描述 得到最小值和最大值 即得到临时数组的长度 数等于临时数组的下标 下标对应的值就加一 把临时数组的信息对应到原数组中 计数排序有很大的约束 最小值和最大值不能相差很大 排序的数适用于非负数 否则得另加代码将负数偏移为正数 最后还
  • MySQL——存储过程详解及实例分析

    目录 一 储存过程简介 1 什么是存储过程 2 存储过程优缺点 3 存储过程入门程序 4 在idea中如何调用储存过程 二 存储过程编程 1 存储过程的变量 2 存储过程中的参数 3 选择结构if 4 分支结构case 5 3个循环结构 6
  • 中文分词jieba学习笔记

    中文分词jieba学习笔记 一 分词模式 二 自定义词典 2 1 命令 2 2 使用方式 三 关键词抽取 基于TF IDF算法 3 1 用jieba analyse extract tags 3 2 用jieba analyse textr
  • idea配置tomcat启动服务器时控制台乱码

    项目场景 在idea中配置tomcat启动时候控制台乱码问题 问题描述 idea中以tomcat启动控制台出现乱码问题 原因分析 由于tomcat8以后默认编码格式是utf 8 tomcat7之前的都是iso8859 1 与idea中的编码
  • 反激式开关电源双环PID(电压环+电流环)控制之MATLAB仿真

    前面一篇文章我讲解了反激式开关电源输出电压的pid控制的matlab仿真 反激式开关电源输出电压PID控制的MATLAB仿真 我只对输出电压做了控制 不管负载多大 只要在设计功率之内 都能把电压维持在12V 但在实际电路设计中 我们还需要考
  • Box2D C++ 教程 第五节:物体(Bodies)

    Box2D C 教程 第五节 物体 Bodies 作者 firedragonpzy 14 十一月 2012 暂无评论 声明 本教程翻译自 Box2D C tutorials Bodies 仅供学习参考 物体 Bodies 物体是物理场景中的
  • 【踩坑】jmeter提取token,响应body中全部是token无法用正则提取

    情况是这样的 这是jmeter的响应结果 响应所有文本都是token 尝试了多次用正则提取 均无法提取全部body 经过查询资料 使用BeanShell 后置处理程序 import org json JSONObject import or
  • 【数据分析】【Pandas】(一)如何制作频率分布直方图

    文章目录 概述 1 直方图 2 密度图 概述 计算一组数据的分布有助于我们更好的了解数据构成 我们可以通过直方图或密度图 将离散的数据通过连续的方式展现出来 数据分布 频数分布 在各组按顺序排列的基础上 列出每个组的总体单位数 形成一个数列
  • nuxtjs 国际化i18n

    1 设置国际化匹配文字 locales zh json locales en json 英文同理 topbar home 首页 pin 沸点 topic 话题 book 小册 search 搜索 menu home 我的主页 label 标
  • 【计算机毕业设计】高校信息资源共享平台

    高校信息资源共享平台 21世纪的今天 随着社会的不断发展与进步 人们对于信息科学化的认识 已由低层次向高层次发展 由原来的感性认识向理性认识提高 管理工作的重要性已逐渐被人们所认识 科学化的管理 使信息存储达到准确 快速 完善 并能提高工作
  • 什么是企业用户画像,怎么构建企业用户画像

    企业画像 简单说 企业给人的印象 可以跟自然人的用户画像相类比 这其实是IT行业的一种叫法 在金融行业 一般叫做 尽职调查报告 当然 尽职调查报告只需要尽职 不需要说的太具体或者太难看 什么是企业用户画像 企业用户画像与个人用户画像有很大区
  • 反射/存储/DOM型XSS攻击原理及攻击流程详解

    文章目录 XSS漏洞原理 1 XSS分类 1 1 攻击流程 2 存储型XSS 2 1 攻击流程 3 DOM型XSS 3 1 攻击流程 XSS修复 XSS漏洞原理 XSS 跨站脚本攻击 是一种常见的 Web 安全漏洞 其允许攻击者在恶意用户的
  • 新版caffe添加自己的层(目前只学会添加,我想要添加的loss还没能实现)

    今天实现了在caffe框架中加入一个层 完成欧式距离的任务 之所以这样 是因为还没有实现自己想要的loss 只是试着学者 看能不能把添加层的流程顺下来 最后实现了 一 总体框架 1 在 src caffe proto caffe proto
  • SpringCache的介绍和使用

    1 简介 1 Spring 从 3 1 开始定义了 org springframework cache Cache和 org springframework cache CacheManager 接口来统一不同的缓存技术 并支持使用 JCa
  • 六、IP地址子网划分与VLAN

    一 IP地址的五大分类 概念 IP地址相当于人的身份证 用于在TCP IP通信协议中标记每台计算机的地址 通常用于十进制来表示 如192 168 1 100 但是在计算机内部 IP地址是一个32位的二进制数值 如11000000 10101
  • [转载]Chrome 与 Chrome OS 各版本下载集合

    Chrome OS 下载 由 Hexxeh提供的第三方编译版本 Chrome OS USB 镜像 点击这里 Chrome OS WMware 镜像 点击这里 Chrome OS Vanilla USB VMWare VirtualBox 点
  • 树的遍历-深度优先遍历和广度优先遍历

    深度优先遍历类似于树的先序遍历 假设给定初态是图中所有顶点均未被访问过 从图中某一顶点vi出发遍历图中的定义如下 首先访问出发点vi 并将其访问标志置为1 然后 从vi出发点依次搜索vi的每个邻接点vj 如vj未被访问过 则以vj为新的出发
  • 函数模板和类模板的实例化和具体化

    一 函数模板 1 显示实例化 explicit instantiation 和显示具体化 explicit specialization 的区别 1 形式上 显示实例化 template void Swap