类模板的偏特化

2023-10-29

Class templates 可以被偏特化(partial specialized,或称部份特化、局部特化)。这使你得以在特定情形下使用特殊实作码,但仍然留给你(使用者)选择  template parameters 的能力。

例如对于下面的  class template: 

template <typename T1, typename T2> 
class MyClass { 
... 

}; 


以下数种形式的偏特化都是合理的: 
//  偏特化:两个  template parameter  相同 
template <typename T> 
class MyClass<T,T> { 
... 
}; 
 

//  偏特化:第二个类型为 int 

template <typename T> 

class MyClass<T,int> { 

... 
}; 
 
//  偏特化:两个  template parameter  均为指针类型  
template <typename T1, typename T2> 
class MyClass<T1*, T2*> { 
... 
}; 
 
以下例子示范,下列各种声明语句将使用上述哪一个  class template: 
MyClass<int,float> mif; //  使用  MyClass<T1,T2> 
MyClass<float,float> mff; //  使用  MyClass<T,T> 
MyClass<float,int> mfi; //  使用  MyClass<T,int> 
MyClass<int*,float*> mp; //  使用 MyClass<T1*,T2*> 
 

如果某个声明语句与两个(或更多)偏特化版本产生同等的匹配程度,这个声明语句便被视为模棱两可(歧义):

 

MyClass<int,int> m; //  错误:同时匹配  MyClass<T,T>  和  MyClass<T,int> 
MyClass<int*,int*> m; //  错误:同时匹配  MyClass<T,T>  和  MyClass<T1*,T2*> 
 
为解除上述第二声明的歧义性,你可以针对「指向相同类型」的指针,提供另一个偏特化版本: 
template <typename T> 
class MyClass<T*,T*> { 
... 
}; 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类模板的偏特化 的相关文章

  • 迪杰斯特拉算法详解+模版+例题

    迪杰斯特拉算法 Dijkstra 是由荷兰计算机科学家狄克斯特拉于1959 年提出的 因此又叫狄克斯特拉算法 是从一个顶点到其余各顶点的最短路径算法 解决的是有权图中最短路径问题 迪杰斯特拉算法主要特点是从起始点开始 采用贪心算法的策略 每
  • c++模板的成员模板

    成员模板 成员模板 一个类 无论是普通类还是模板类 可以包含本身是模板的成员函数 成员模板不能是虚函数 普通类的成员模板 class DebugDelete public DebugDelete std ostream s std cerr
  • 网络流经典模型——最大权闭合子图

    网络流经典模型 最大权闭合子图 什么是闭合子图 闭合子图的概念 通俗点说就是选出一个图的子图 使得子图中的所有点出度指向的点依旧在这个子图内 则说明此子图是闭合子图 如下图 最大权闭合子图 假设每个点具有点权值 在一个图的所有闭合子图中 点
  • 模板类重载>>(输入)和<<(输出)运算符

    在模板类中输入运算符 gt gt 和输出运算符 lt lt 的重载 使用友元在类内声明 在类外实现 include
  • sgi_stl源码学习,解析set、map背后的_Rb_tree源码(未完待续)

    参考资料 chatGPT先推荐的 算法导论 第13章 不过我手头没有这本书 https www cnblogs com skywang12345 p 3245399 html chatGPT推荐的 外加sgi stl源码 个人觉得通过源码理
  • template模板:泛型化编程

    一 在函数中使用模板 template
  • c++显示实例化和显示具体化

    1 实例化 instantiation 实例化是指编译器使用函数 或者是类 模板为特定类型生成函数 类 定义 编译器不会为函数 或者类 模板生成定义 只有当我们为函数 或者类 模板指定了一个特定类型时 编译器才会生成 编译器为特定类型的函数
  • c++可变参数模板函数

    可变参数模版函数 类型一致 可变参数 使用头文件 cstdarg va list arg ptr 开头指针 va start arg ptr n 从开头开始读取n个 va arg arg ptr T 根据数据类型取出数据 va end ar
  • 字符串学习&总结(感觉主要是总结模板)

    目录 前言 一 哈希 导读 HASH模板 哈希 双哈希 hash应用 hash牛逼克拉斯 0 核心操作 求子串哈希值 1 字符串匹配 2 允许k次失配的字符串匹配 3 最长回文子串 hash操作简单 可解决的问题有点多啊 nice 4 最长
  • 【 C++ 】函数模板进阶

    目录 1 非类型模板参数 2 模板的特化 2 1 概念 2 2 函数模板特化 2 3 类模板特化 全特化 偏特化 类模板特化示例 3 总结 1 非类型模板参数 模板参数分类类型形参与非类型形参 类型模板参数 出现在模板参数列表中 跟在cla
  • C++类模板中的友元函数的声明和定义分别放在哪里

    前面提到了模板的声明和定义推荐都放在头文件中 那么该类中的友元函数的声明和定义该放在哪里呢 因为友元函数并不属于这个类 按照习惯 我们一般把声明放在类中 而把定义放在类的外面 但对于类模板来说 这样就出问题了 很多编译器并不支持将友元函数的
  • 模板特化详解

    模板特化 就是在实例化模板时 对特定类型的实参进行特殊处理 即实例化一个特殊的实例版本 当以特化定义时的形参使用模板时 将调用特化版本 模板特化分为全特化和偏特化 1 函数模板的特化 只能全特化 泛型版本 template
  • STL十大容器 之 list

    特点 内存不连续 底层实现是链表 插入和删除的效率比较快 随机访问效率比较低 和vector相比 不再需要 capacity 和 reserve 操作 因为链表没有大小限制 不需要为了效率增加预分配内存的功能 一 插入和删除 push ba
  • 变长参数表va_list,模板template,打造通用函数

    假设我想写一个支持变长参数的max函数 template
  • (模板)米勒罗宾素数测试

    18位素数 154590409516822759 19位素数 2305843009213693951 梅森素数 19位素数 4384957924686954497 LL prime 6 2 3 5 233 331 LL qmul LL x
  • C#字典树(字母树)的模板

    保存一下JimLiu大神的 既然JimLiu大神的这个 net博客不维护了 我就搬过来了 哈哈哈 希望JimLiu大神不要见怪
  • Mixin从理论到实践

    mixin从理论到实践 mixin从理论到实践 一 什么是mixin 二 使用mixin 三 mixin的合并策略 四 mixin辨析 五 个人实践 mixin从理论到实践 一 什么是mixin mixin混入 Vue js vuejs o
  • 【C++】动态内存管理和泛型编程

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 C C 内存区域划分 二 常见变量存储区域 三 new
  • 双指针模板

    核心思路 首先打一个 O n 2 O n 2 O n2 的暴力 然后考虑性质 当i j具有单调性的时候 那么我们才可以用双指针来优化 基础例题 最长连续不重复子
  • C++ 模板简介(一)—— SFINAE

    SFINAE 类型检查 Concepts SFINAE 机制是组成 C 模板机制及类型安全的相当重要的基础 全称是 Substitution failure is not an error 大概的意思就是只要找到了可用的原型 比如函数模板

随机推荐

  • 转1:Python字符编码详解

    Python27字符编码详解 声明 一 字符编码基础 1 抽象字符清单ACR 2 已编码字符集CCS 3 字符编码格式CEF 31 ASCII初创 311 ASCII 312 EASCII 32 MBCSDBCSANSI本地化 321 GB
  • Android Studio导入工程报错[Plugin with id 'com.android.application' not found]

    http blog csdn net seafishyls article details 53572939 版权声明 本文为博主原创文章 未经博主允许不得转载 目录 出错现象 原因分析 buildgradleProject xxxx bu
  • 【解决】android设备有root权限,执行“adb disable-verity”命令报错“verity cannot be disabled/enabled - USER build”

    这个错误提示意味着你的设备是使用USER版本的固件构建的 这个版本不允许禁用verity功能 但是 你可以尝试以下步骤来解决问题 确认你的设备是否已经root 可以通过执行 adb root 命令来检查 确认你的设备是否已经启用了开发者选项
  • vue-cli3.0 配置使用 less 全局样式

    在css样式文件夹中新增 global less 作为全局样式 在 main js 中通过 import 导入 可正常使用样式 但 global less 中定义的样式属性还不能全局使用 需通过以下方法配置 1 安装 style resou
  • 加密软件如何和PDM软件结合使用

    在企业里面都会用到加密软件 比如IP guard 壹加密 亿赛通等等 但是加密软件会导致PDM软件原本的各个功能都被限制 所以为了助力企业解决问题 更好的帮助企业完成PDM的正常使用 今天给大家分享一下解决方法 请看下文 SOLIDWORK
  • APP自动化测试-2. Appium录制测试用例

    APP自动化测试 2 Appium录制测试用例 文章目录 APP自动化测试 2 Appium录制测试用例 前言 一 android自动化依赖 1 adb依赖 2 android真机或模拟器 3 Appium Desktop Appium 二
  • CSS 鼠标样式和手指样式整理

    巧合要用到鼠标样式效果 就顺便整理了下十五种CSS鼠标样式 小例子供大家使用啊 CSS鼠标样式语法如下 任意标签中插入 style cursor 例 子 span 文本或其它页面元素 span a href 文本或其它页面元素 a 注意把
  • 【ReID】【代码注释】难样本三元组损失TriHard loss deep-person-reid/losses.py

    源码URL https github com michuanhaohao deep person reid blob master losses py TriHard loss部分的源码注释 class TripletLoss nn Mod
  • 多线程编程——实战篇(一)

    多线程编程 实战篇 二 多线程编程 实战篇 三 多线程编程 实战篇 四 在进入实战篇以前 我们简单说一下多线程编程的一般原则 安全性 是多线程编程的首要原则 如果两个以上的线程访问同一对象时 一个线程会损坏另一个线程的数据 这就是违反了安全
  • ClickHouse之建表优化和底层语法优化(谓词下推等)

    文章目录 一 建表优化 1 数据类型 1 1 时间字段的类型 1 2 空值存储类型 2 分区和索引 3 表参数 4 写入和删除优化 5 常见配置 5 1 CPU 资源 5 2 内存资源 5 3 存储 二 CK底层语法优化 1 count优化
  • Maven: maven parent.relativepath point at wrong local pom

    Maven maven parent relativepath point at wrong local pom 参考 https blog csdn net qwfys200 article details 82703025
  • DMA实验程序

    DMA实验程序 1 2 参数配置
  • 【移动端表格组件】uniapp简单实现H5,小程序,APP多端兼容表格功能,复制即用,简单易懂【详细注释版本】

    前言 由于最近需要做移动端的项目 有个pc端的后台系统里面需要移一部分页面过来 而里面就有很多的表格 我就开始惯例网上先找前人栽的树 我好乘凉 然后找了一圈发现 不管是主流的移动端ui库或者网上自己写的帖子 或者uniapp的插件网站 都没
  • 微信小程序新版canvas2d海报绘制(教你轻松搞定)

    效果 说明 canvas官方很早已经发声不再维护了 所以很多方法都已经不再适用 目前官方推荐适用canvas2d来绘制生成海报 canvas2d来绘制海报 canvas2d的优点 例如 不需要先预下载网络图片再绘制 前端只需要调用网络图片即
  • 物理层&数据链路层

    根据TCP IP体系 计算机网络分成4层体系结构 学习时作5层 物理层 比特流 数据链路层 帧 网络层 IP数据报 分组 运输层 报文 应用层 PDU 其中关系 对等层 gt 协议 上下层 gt 服务 物理层 物理层的数据传输单元为位 比特
  • 【mcuclub】继电器

    1 实物图 型号 SRD 05VDC SL C 2 原理图 3 内部构造 铁芯 线圈 衔铁 触点 弹簧 4 工作原理 只要在线圈两端加上一定的电压 线圈中就会流过一定的电流 从而产生电磁效应 衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸
  • 基于Spring事务的可靠异步调用实践

    SpringTxAsync组件是仓储平台组 WMS6 自主研发的一个专门用于解决可靠异步调用问题的组件 通过使用SpringTxAsync组件 我们成功地解决了在仓储平台 WMS6 中的异步调用需求 经过近二年多的实践并经历了两次618活动
  • caffe源码阅读《二》layer

    首先layer这个类是一个基类 所以他是没有cpp实现的 可以看一下它的cpp代码 include caffe layer hpp namespace caffe INSTANTIATE CLASS Layer namespace caff
  • Vulnhub靶机实战-Me-and-My-Girlfriend

    声明 好好学习 天天向上 搭建 使用virtualbox打开 网络和我的PRESIDENTIAL一样 是要vmware和virtualbox互连 渗透 存活扫描 发现目标 arp scan l 端口扫描 nmap T4 A 192 168
  • 类模板的偏特化

    Class templates 可以被偏特化 partial specialized 或称部份特化 局部特化 这使你得以在特定情形下使用特殊实作码 但仍然留给你 使用者 选择 template parameters 的能力 例如对于下面的