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

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

先看类模板:

template<typename T1, typename T2>
class Test
{
public:Test(T1 i,T2 j):a(i),b(j){cout<<"模板类"<<endl;}
private:T1 a;T2 b;
};template<>
class Test<int , char>
{
public:Test(int i, char j):a(i),b(j){cout<<"全特化"<<endl;}
private:int a;char b;
};template <typename T2>
class Test<char, T2>
{
public:Test(char i, T2 j):a(i),b(j){cout<<"偏特化"<<endl;}
private:char a;T2 b;
};

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

 Test<double , double> t1(0.1,0.2);Test<int , char> t2(1,'A');Test<char, bool> t3('A',true);

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

//模板函数
template<typename T1, typename T2>
void fun(T1 a , T2 b)
{cout<<"模板函数"<<endl;
}//全特化
template<>
void fun<int ,char >(int a, char b)
{cout<<"全特化"<<endl;
}//函数不存在偏特化:下面的代码是错误的
/*
template<typename T2>
void fun<char,T2>(char a, T2 b)
{cout<<"偏特化"<<endl;
}
*/

至于为什么函数不能偏特化,似乎不是因为语言实现不了,而是因为偏特化的功能可以通过函数的重载完成。

转载于:https://www.cnblogs.com/xuelisheng/p/9323853.html

C++ 模板的全特化与偏特化相关推荐

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

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

  2. C/Cpp / STL / 模板全特化和偏特化

    栗子 #include <iostream>template <typename T1, typename T2> struct Test {void Print() { st ...

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

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

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

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

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

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

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

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

  7. 【C++模板】特化与偏特化 template [partial] specialization

    1 template specialization 模板特化 一般情况下类模板定义如下: template<class Window, class Controller> class Wi ...

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

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

  9. C++ 模板特化与偏特化

    文章目录 1.模板特化 1.1 概述 1.2 函数模板特化 1.3 类模板特化 2.模板偏特化 2.1 概述 2.2 函数模板偏特化 2.3 类模板偏特化 3.模板类调用优先级 参考文献 1.模板特化 ...

最新文章

  1. 我爱我家 CIO 刘东颖:如何靠六大维度提升“数字化”能力?|鲸犀峰会
  2. 【技术教程】SequoiaDB对接Kafka
  3. .NET简谈自定义事务资源管理器
  4. Zabbix 通过 API 监控 k8s | 技巧
  5. ubuntu 安装、卸载重装mysql 8.0
  6. 单个dcm文件含有多帧数据,如何拆分成多个dcm文件
  7. EDEM资料大全(包含教程、论文、案例、应用)
  8. 【保姆级教程】Spring Boot单元测试(Controller层的Header处有Token验证的详细示例代码),文末介绍Postman 的基本使用
  9. CSS 指层叠样式表 (Cascading Style Sheets)
  10. [M1]Daily Scum 9.26
  11. CC2640R2F BLE5.0 蓝牙协议栈GATTServApp模块
  12. 10个建模师,9个吃不饱,游戏建模师职业现状
  13. 基于STM32与红外感应开关的自动门设计与实现(结构+设计)
  14. itextpdf 怎么下划线_java – 带有粗体和下划线的Itext新字体
  15. 西方哲学史 -- 毕达哥拉斯
  16. 电商黑马,集体倒在2019!
  17. 百度新闻首页和百度站长平台首页相继改版
  18. C++程序员职业规划
  19. DataCon 2020 Coremail邮件安全竞赛-赛题一满分writeup
  20. 微信小程序错误码40029 ——errcode: 40029, errmsg: invalid code, hints: [ req_id: gElDqRLnRa-744jra ]

热门文章

  1. signature=45ca03a07a2e888fb57b0d2c351110d7,Attention: Docket Number H054a Dec. 31,2004
  2. linux操作系统的训练目的,《西南交大-Linux操作系统应用训练》.doc
  3. ftp 200 227 451linux,FTP无法链接
  4. 持久层和数据访问层_什么是持久层? JDBC 演变的 Mybatis 架构分析
  5. 分析频域滤波和空域滤波的各自特点_同态滤波原理及其matlab实现
  6. 【免费】某平台3980元大数据课程免费下载,仅此1次
  7. 设置builder.max_workspace_size的意义
  8. python json的中文读取与中文写入
  9. js微信抢红包脚本代码_如何利用JavaScript来实现微信抢红包功能的示例代码
  10. Linux下Tomcat死活找不到JSP页面中import指定类的解决方法