函数模板全特化与偏特化

2023-11-17

模板为什么要特化,因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的。

模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。

先看类模板:

 
  1. template<typename T1, typename T2>

  2. class Test

  3. {

  4. public:

  5. Test(T1 i,T2 j):a(i),b(j){cout<<"模板类"<<endl;}

  6. private:

  7. T1 a;

  8. T2 b;

  9. };

  10.  
  11. template<>

  12. class Test<int , char>

  13. {

  14. public:

  15. Test(int i, char j):a(i),b(j){cout<<"全特化"<<endl;}

  16. private:

  17. int a;

  18. char b;

  19. };

  20.  
  21. template <typename T2>

  22. class Test<char, T2>

  23. {

  24. public:

  25. Test(char i, T2 j):a(i),b(j){cout<<"偏特化"<<endl;}

  26. private:

  27. char a;

  28. T2 b;

  29. };

 

那么下面3句依次调用类模板、全特化与偏特化:

 

 
  1. Test<double , double> t1(0.1,0.2);

  2. Test<int , char> t2(1,'A');

  3. Test<char, bool> t3('A',true);


而对于函数模板,却只有全特化,不能偏特化:

 

 
  1. //模板函数

  2. template<typename T1, typename T2>

  3. void fun(T1 a , T2 b)

  4. {

  5. cout<<"模板函数"<<endl;

  6. }

  7.  
  8. //全特化

  9. template<>

  10. void fun<int ,char >(int a, char b)

  11. {

  12. cout<<"全特化"<<endl;

  13. }

  14.  
  15. //函数不存在偏特化:下面的代码是错误的

  16. /*

  17. template<typename T2>

  18. void fun<char,T2>(char a, T2 b)

  19. {

  20. cout<<"偏特化"<<endl;

  21. }

  22. */

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

函数模板全特化与偏特化 的相关文章

  • Python中利用compileall将py项目打包成pyc项目

    在进行python项目开发的时候一定会涉及到项目打包这个环节 有时因为一些依赖的原因没法打包成一个大的可执行文件 但为了代码的安全性我们最起码需要打包成pyc的预编译格式 这样运行者 一般是测试和线上部署 在无法看到程序源码的同时也能顺利执
  • numpy.c_和numpy.r_的用法

    numpy c 将切片对象沿第二个轴 按列 连接 np c np array 1 2 3 np array 4 5 6 array 1 4 2 5 3 6 np c np array 1 2 3 0 0 np array 4 5 6 arr
  • UML类图几种关系的总结

    在UML类图中 常见的有以下几种关系 泛化 Generalization 实现 Realization 关联 Association 聚合 Aggregation 组合 Composition 依赖 Dependency 1 泛化 Gene
  • 子类加@Data后,IDEA调试时“出现”父类属性无值

    项目场景 自测一个功能的时候 IDEA调试同过对象的VIEW查看对象内容 发现加了 Data的返回子类型中父类的属性没有出现 问题描述 父类Response中的返回VO对象 Data public class PVO private Sti
  • 链式存储之:链表的引出及其简介

    上篇博客 笔者讲解了一下顺序表ArrayList 对于ArrayList有想法的各位老铁可以看一下 值得思索的 ArrayList和线性表 你确定错过这次机会 念君思宁的博客 CSDN博客值得思索的 ArrayList和线性表 你确定错过这
  • python格式化

    python格式化是python语法中很基础也是很重要的知识 本文介绍了python格式化的几种方法仅供参考 一 格式化方法1 格式为 输出内容 对应的变量1 对应的变量2 其中 d表示整数类型 s表示字符串类型 f表示浮点类型 例子 设以
  • 半实物仿真测试方法、装置及系统与流程

    机器人控制器的测试主要包括控制器核心软件的测试和外部接口的测试 同时为了保证机器人控制器在真实工况下进行测试 需要对其实际运行的各项功能和性能指标进行测试 半实物仿真测试平台是连接控制器和被控对象进行测试的测试平台 在基于半实物仿真的实验中
  • 数据清洗:让数据更纯净,Python实战 机器学习&深度学习

    目录 步骤1 导入必要的库 步骤2 加载数据 步骤3 处理缺失值 3 1 删除含有缺失值的行

随机推荐

  • 给应届生开出20K月薪,看到招聘要求后,我傻眼了......

    一到秋招季 就有 灵异 事件发生 应届生痛斥找不到工作 精心准备的简历投了几十家过不了网申 而企业控诉招不到人才 今年明明扩招了 应届生be like 这些岗位都挺适合我的 简直一个量身打造 用人单位be like 岗位要求门槛写得也不高
  • MySQL数据库迁移快速导出导入大量数据(外发)

    数据库迁移是我们经常可遇到的问题 对于少量的数据 迁移基本上不会有什么问题 生产环境中 有以下情况需要做迁移工作 磁盘空间不够 比如一些老项目 选用的机型并不一定适用于数据库 随着时间的推移 硬盘很有可能出现短缺 业务出现瓶颈 比如项目中采
  • vue-cli3打包项目

    vue cli3打包项目 使用vue cli3开发好项目后 就可以将它打包 这样就可以通过输出文件中的index html来访问该项目了 在打包项目之前需要先修改两个文件 分别是vue config js router index js 如
  • 【C++】【TensorRT】检测时间不稳定原因汇总(持续更新)

    本人使用C 版本的TensorRT框架做模型部署的开发工作 在实际上线具体的项目过程中碰到过检测时间不理想的情况 所以本人专门为此写一篇博客记录曾经遇到过的坑以及对应的解决方案 一 相同型号的机器和显卡检测时间不同 1 问题描述 两台相同型
  • 一文掌握JS 事件循环(Event Loop)

    作为前端开发者 事件循环 Event Loop 是必须掌握的内容 它是前端极其重要的基础知识 在日常的工作或者面试中也是一个非常高频的话题 理解 JavaScript 的事件循环往往伴随着宏任务和微任务 JavaScript 单线程执行过程
  • 模电基础(2)半导体二极管

    1 二极管的组成 二极管 将PN结封装起来 引出两个电极就构成了半导体二极管 二极管的常见结构包括 点接触型 图a 面接触型 图b 平面型 图c 点接触型 结面积小 不可通过较大的电流 结电容小 工作频率高 面接触型的结面积变大 所允许的电
  • Go语言网络编程(socket编程)http编程

    1 http编程 1 1 1 web工作流程 Web服务器的工作原理可以简单地归纳为 客户机通过TCP IP协议建立到服务器的TCP连接 客户端向服务器发送HTTP协议请求包 请求服务器里的资源文档 服务器向客户机发送HTTP协议应答包 如
  • 基于滑模控制的永磁同步电机直接转矩控制学习

    导读 针对传统的DTC存在的问题进行 本期主要介绍基于滑模控制的永磁同步电机直接转矩控制 如果需要文中的仿真模型 关注微信公众号 浅谈电机控制 获取 传统DTC采用两个 Bang bang 控制器分别对转矩和磁链幅值进行控制 响应快速 对系
  • IDEA中的方法、数组和重载

    IDEA软件 常用快捷键 快捷键 功能 Ctrl Shift 选中代码注释 多行注释 再按取消注释 Ctrl Alt L 格式化代码 Alt Ins 自动生成代码 toString get set等方法 Alt Enter 导入包 自动修正
  • BSC链节点搭建 保姆级详细教程

    BSC链节点搭建 保姆级详细教程 文档最后修改日期 2023 06 24 一 服务器配置要求 官方建议配置 系统 Mac Linux CPU 16核 内存 64 GB 内存 带宽 50M以上 硬盘 大于2T固态SSD可用空间数据盘 本次搭建
  • CCPC2016长春J (hdu 5920 Ugly Problem)

    给一个数字 n 1 lt n lt 1e18 让你找一些数字加起来和为 n 数字个数不超过50个而且数字都是回文数字 每次找到大小最接近这个数的回文数即可 如6745888可以找到6745476 6960242可以找到6950595 用大数
  • 全链路压测

    核心流程 全链路压测实施的核心流程如下 骤一 确定压测目标 压测目标主要包括压测范围 策略 目的 往往与业务 技术目标息息相关 例如 压测范围 用户注册加登录 为大规模拉新做准备 压测策略 高仿真生产环境压测 提前经历真实的业务高峰 压测目
  • Vue Baidu Map组件封装:多边形组件和右键菜单

    在Vue上进行开发 地图使用了百度提供的Vue Baidu Map 当前版本为v0 21 15 官方文档地址 https dafrok github io vue baidu map zh index 开发需求 在百度地图上动态进行多边形的
  • 【JavaSe】高级特性篇(三) Java高级特性注解

    JavaSe 高级特性篇 三 Java高级特性注解 1 注解 Annotation 概述 1 1 定义 定义 注解 Annotation 也叫元数据 一种代码级别的说明 它是JDK1 5及以后版本引入的一个特性 与类 接口 枚举是在同一个层
  • Redis-五种数据结构

    1 五种数据结构图解如下 1 1 String数据结构 命令 get set del incr decrget set del incr decr 联想java map
  • Matplotlib绘制漂亮的饼状图

    python绘图系列文章目录 往期python绘图合集 python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取exc
  • 【满分】【华为OD机试真题2023 JAVA&JS】计算网络信号

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 计算网络信号 知识点广搜数组 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 网络信号经过传递会逐层衰减 且遇到阻隔物无法直接穿透 在此情况下需要计算某个位置的网
  • MISC方向MeowMeowMeow解题方法

    下载好附件后 通过好多工具都没有找到flag 突发奇想通过010工具打开MeowMeow png 发现了一堆乱码 当划到最下面的时候 发现了那些乱码有一定的规律 这个时候向上找 找到最开始出现规律的位置 会发现与题目给的flag格式CatC
  • 1001 害死人不偿命的(3n+1)猜想 (15 分)

    1001 害死人不偿命的 3n 1 猜想 15 分 卡拉兹 Callatz 猜想 对任何一个正整数 n 如果它是偶数 那么把它砍掉一半 如果它是奇数 那么把 3n 1 砍掉一半 这样一直反复砍下去 最后一定在某一步得到 n 1 卡拉兹在 1
  • 函数模板全特化与偏特化

    模板为什么要特化 因为编译器认为 对于特定的类型 如果你能对某一功能更好的实现 那么就该听你的 模板分为类模板与函数模板 特化分为全特化与偏特化 全特化就是限定死模板实现的具体类型 偏特化就是如果这个模板有多个类型 那么只限定其中的一部分