栗子

#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 / 模板全特化和偏特化相关推荐

  1. Th4.6:模板全特化、偏特化(局部特化)详述

    本小节回顾的知识点分别是模板全特化.偏特化(局部特化). 今天总结的知识分为以下4个大点: (1)特化与泛化 (2)类模板特化     (2.1)类模板全特化         a)常规全特化      ...

  2. 模板特化,全特化,偏特化,全部特化,部分特化的含义

    模板特化,任何针对模板参数进一步进行条件限制设计的特化版本.<泛型思维> 全特化就是全部特化,即针对所有的模板参数进行特化.<c++ primer> 偏特化就是部分特化,即针对 ...

  3. 第十天2017/04/21(2、泛型编程:模板 / 全特化、偏特化)

    1.什么是模板? template<class T1,class T2,.....> 类属----类型参数化,又称参数模板使得程序可以从逻辑功能上抽象,把被处理的对象(数据)的类型作为参数 ...

  4. (函数/类模板)的(偏特化/全特化)

    特化的概念 特化,就是将泛型的东东搞得"具体化"一些,从字面上来解释,就是为已有的模板参数进行一些使其特殊化的指定,使得以前不受任何约束的模板参数,或受到特定的修饰或完全被指定了下 ...

  5. [C++基础]034_C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)

    http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/18/2728753.html 1.  主版本模板类 首先我们来看一段初学者都能看 ...

  6. C++ 模板的全特化与偏特化

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

  7. C++ 模板 全特化与偏特化

    C++ 模板 全特化与偏特化 模板 模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性.模版可以分为两类,一个是函数模版,另外一个是 ...

  8. C++模板的全特化和偏特化

    C++模板的全特化与偏特化 全特化 偏特化 例子 总结 全特化 全特化一般用于处理有特殊要求的类或者函数,此时依靠泛型模板无法处理这种情况.,因此全特化可以运用在类模板和函数模板当中.其模板参数列表为 ...

  9. C++——模板特化和偏特化

    1.引言 C++中的模板分为类模板和函数模板,虽然它引进到C++标准中的时间不是很长,但是却得到了广泛的应用,这一点在STL中有着充分的体现.目前,STL在C++社区中得到了广泛的关注.应用和研究.理 ...

最新文章

  1. 互联网思维-NO.1思维(1)
  2. 软件设计原则(二)单一职责原则 -Single Responsibility Principle
  3. solr学习之一 搜索基本知识
  4. PyTorch基础(part8)--LSTM
  5. JavaFX UI控件教程(十三)之Table View
  6. P5733 【深基6.例1】自动修正(C++、python代码)
  7. 心理正常与异常的区分_心理正常与心理异常区分三原则
  8. 2021L3HCTF luuuuua Writeup
  9. Windows无法启动MapGIS DataStorage Service服务
  10. 量化新手初识基金绩效分析
  11. 安卓逆向_6 --- Dalvik 字节码、Smali 详解
  12. 帝国cms php超时,帝国CMS后台登录超时、登录错误5次限制的解决办法
  13. 图片的质量压缩和二次采样
  14. jetson xavier nx安装ROS Melodic
  15. Mysql :Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
  16. 5G新空口关键技术之--信道编码
  17. 英语中’s和s’的区别
  18. 【Linux基础】文件权限(待补充)
  19. 有趣的网站:河蟹娱乐
  20. 数学正态分布中的那两个字母怎么读

热门文章

  1. 转: ajax跨域之JSONP
  2. linux 常见试题(2)-选择
  3. 关于SharePoint部署Webpart的十个必读链接(downmoon)
  4. tensorflow基本概念
  5. 归并排序相关题目(待编辑)
  6. docker kaniko push推送镜像至harbor报错:x509: certificate signed by unknown authority(命令中添加 --skip-tls-ver)
  7. Django 3.2.5博客开发教程:用Admin管理后台管理数据
  8. hdfs集群数据迁移:使用distcp命令
  9. 使用KubeKey 离线环境部署 KubeSphere v3.0.0
  10. 【代码】使用reentrantlock必须要手动释放锁