C/Cpp / STL / 模板全特化和偏特化
栗子
#include <iostream>template <typename T1, typename T2>
struct Test
{void Print() { std::cout << "原生版本" << std::endl; }
};template <typename T2>
struct Test<float, T2>
{void Print() { std::cout << "偏特化版本" << std::endl; }
};template <>
struct Test<int, double>
{void Print() { std::cout << "全特化版本" << std::endl; }
};int main()
{Test<double, int> t1;t1.Print();Test<float, double> t2;t2.Print();Test<int, double> t3;t3.Print();return 0;
}
结果
原生版本
偏特化版本
全特化版本
说明
模板特化,顾名思义,就是对于模板类,针对特定的数据类型进行再次声明,从而达到模板特殊处理的目的。这里面的特化分为偏特化和全特化,区别如下:
- 偏特化是指定了部分类型,所以偏特化版本称为原生版本的子集。若实例化时参数类型为指定的类型,则优先调用特例化版本的代码。
- 偏特化本质上其还是模板。
- 全特化本质上是一个实例,当编译器匹配时会优先匹配参数一致的实例
模板特化的功能在STL中广泛使用,例如 __type_traits ,通过模板特化,可以达到判断型别是否是原生类型、指针类型以及类类型的目的。
(SAW:Game Over!)
C/Cpp / STL / 模板全特化和偏特化相关推荐
- Th4.6:模板全特化、偏特化(局部特化)详述
本小节回顾的知识点分别是模板全特化.偏特化(局部特化). 今天总结的知识分为以下4个大点: (1)特化与泛化 (2)类模板特化 (2.1)类模板全特化 a)常规全特化 ...
- 模板特化,全特化,偏特化,全部特化,部分特化的含义
模板特化,任何针对模板参数进一步进行条件限制设计的特化版本.<泛型思维> 全特化就是全部特化,即针对所有的模板参数进行特化.<c++ primer> 偏特化就是部分特化,即针对 ...
- 第十天2017/04/21(2、泛型编程:模板 / 全特化、偏特化)
1.什么是模板? template<class T1,class T2,.....> 类属----类型参数化,又称参数模板使得程序可以从逻辑功能上抽象,把被处理的对象(数据)的类型作为参数 ...
- (函数/类模板)的(偏特化/全特化)
特化的概念 特化,就是将泛型的东东搞得"具体化"一些,从字面上来解释,就是为已有的模板参数进行一些使其特殊化的指定,使得以前不受任何约束的模板参数,或受到特定的修饰或完全被指定了下 ...
- [C++基础]034_C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)
http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/18/2728753.html 1. 主版本模板类 首先我们来看一段初学者都能看 ...
- C++ 模板的全特化与偏特化
模板为什么要特化,因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的. 模板分为类模板与函数模板,特化分为全特化与偏特化.全特化就是限定死模板实现的具体类型,偏特化就是如果这 ...
- C++ 模板 全特化与偏特化
C++ 模板 全特化与偏特化 模板 模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性.模版可以分为两类,一个是函数模版,另外一个是 ...
- C++模板的全特化和偏特化
C++模板的全特化与偏特化 全特化 偏特化 例子 总结 全特化 全特化一般用于处理有特殊要求的类或者函数,此时依靠泛型模板无法处理这种情况.,因此全特化可以运用在类模板和函数模板当中.其模板参数列表为 ...
- C++——模板特化和偏特化
1.引言 C++中的模板分为类模板和函数模板,虽然它引进到C++标准中的时间不是很长,但是却得到了广泛的应用,这一点在STL中有着充分的体现.目前,STL在C++社区中得到了广泛的关注.应用和研究.理 ...
最新文章
- 互联网思维-NO.1思维(1)
- 软件设计原则(二)单一职责原则 -Single Responsibility Principle
- solr学习之一 搜索基本知识
- PyTorch基础(part8)--LSTM
- JavaFX UI控件教程(十三)之Table View
- P5733 【深基6.例1】自动修正(C++、python代码)
- 心理正常与异常的区分_心理正常与心理异常区分三原则
- 2021L3HCTF luuuuua Writeup
- Windows无法启动MapGIS DataStorage Service服务
- 量化新手初识基金绩效分析
- 安卓逆向_6 --- Dalvik 字节码、Smali 详解
- 帝国cms php超时,帝国CMS后台登录超时、登录错误5次限制的解决办法
- 图片的质量压缩和二次采样
- jetson xavier nx安装ROS Melodic
- Mysql :Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
- 5G新空口关键技术之--信道编码
- 英语中’s和s’的区别
- 【Linux基础】文件权限(待补充)
- 有趣的网站:河蟹娱乐
- 数学正态分布中的那两个字母怎么读
热门文章
- 转: ajax跨域之JSONP
- linux 常见试题(2)-选择
- 关于SharePoint部署Webpart的十个必读链接(downmoon)
- tensorflow基本概念
- 归并排序相关题目(待编辑)
- docker kaniko push推送镜像至harbor报错:x509: certificate signed by unknown authority(命令中添加 --skip-tls-ver)
- Django 3.2.5博客开发教程:用Admin管理后台管理数据
- hdfs集群数据迁移:使用distcp命令
- 使用KubeKey 离线环境部署 KubeSphere v3.0.0
- 【代码】使用reentrantlock必须要手动释放锁