上面对模板的特化进行了总结。那模板的偏特化呢?所谓的偏特化是指提供另一份模板定义式,而其本身仍为模板;也就是说,针对模板参数更进一步的条件限制所设计出来的一个特化版本。这种偏特化的应用在STL中是随处可见的。比如

1.测试代码:

#include <iostream>
using namespace std;namespace templateTest {//模版泛化template<typename T>class iterator_traits{public:iterator_traits() { cout << "模版泛化" << endl; }~iterator_traits() {}};//偏特化template<typename T>class iterator_traits<T*>{public:iterator_traits() { cout << "模版偏特化,特化常规指针" << endl; }~iterator_traits() {};};//偏特化template<typename T>class iterator_traits<const T*>{public:iterator_traits() { cout << "模版偏特化,特化const指针" << endl; }~iterator_traits() {}};//全特化template<>class iterator_traits<int>{public:iterator_traits() { cout << "模版全特化int类型" << endl; }~iterator_traits() {}};
};int main()
{templateTest::iterator_traits<int> t1;         //  模版全特化int类型templateTest::iterator_traits<float> t2;       //  模版泛化templateTest::iterator_traits<int*> t3;        //  模版偏特化,特化常规指针templateTest::iterator_traits<const int*> t4;  //  模版偏特化,特化const指针
}

2. 测试代码:

#include <iostream>
using namespace std;//泛化
template<class U, class T>
class Test
{
public:Test() { cout << "Test 泛化" << endl; }
};//偏特化
template<class T>
class Test<int, T>
{
public:Test() { cout << "Test 偏特化" << endl; }
};//全特化
template<>
class Test<int, char>
{
public:Test() { cout << "Test 全特化" << endl; }
};/*--------------------------------------------------*/template<typename T>
void max(const T& t1, const T& t2)
{cout << "模版函数泛化" << endl;}//其实函数模版不存在偏特化,只有全特化
template<>
void max<int>(const int& t1, const int& t2)
{cout << "模版函数全特化" << endl;
}void main()
{Test<int, int> t1;   // Test 偏特化Test<float, int> t2; // Test 泛化Test<int, char> t3;  // Test 全特化max(5, 10);         //  模版函数特化max(5.5, 10.5);     //  模版函数泛化
}

【C++ Primer | 16】容器适配器全特化、偏特化相关推荐

  1. 模板 泛化 全特化 偏特化

    template<>出现,就表示要特化了 为什么要特化呢?泛化不就是为了解决数据类型不一致吗? 泛化是通用,特化是优化,缺一不可 特化,又被成为全特化 full-specializatio ...

  2. 操作符重载and模板(泛化, 全特化, 偏特化)

    模板 Header(头文件)中的防卫式声明.布局 // complex.h// guard 防卫式声明 #ifndef __COMPLEX__ #define __COMPLEX__// 0.forw ...

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

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

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

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

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

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

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

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

  7. 模板类的全特化、偏特化

    我们先来定义一个普通的模板类 1 template<class T> 2 struct Test 3 { 4 Test(){ cout << "模板类" & ...

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

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

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

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

最新文章

  1. walle(瓦力)部署系统的安装和简单使用
  2. java quartz 触发_手动触发Quartz作业
  3. druid ssh加密 java mysql_springboot 整合druid数据库密码加密功能的实现代码
  4. java 十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制...
  5. 2个js实现图片轮播效果(用)
  6. 修改Jupyter Notebook默认工作目录
  7. mysql 插入加锁_MySQL的死锁系列- 锁的类型以及加锁原理
  8. 被利用达数百万次、瞄准 Linux 系统的 Top 15漏洞
  9. Django-ROM(字段,参数)
  10. Python实训第一天--基础知识
  11. tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError:)...
  12. matlab红色爱心,Matlab心形函数动态图
  13. 移动硬盘提示格式化的处理
  14. 环境篇:CM+CDH6.3.2环境搭建(全网最全)
  15. 【mirror】国内镜像站,没事翻一翻
  16. Android判断当前系统时间是否在指定时间的范围内(免消息打扰)
  17. 抖音seo源码,抖音短视频SEO,SEO系统源码搭建
  18. 国际青少年计算机技能大赛英语,竞赛:2017中学生英语能力、青少年信息学奥赛!...
  19. 网络安全该从何入手?
  20. js滚动到指定位置显示或隐藏元素

热门文章

  1. iOS-cocoapods使用方法
  2. java中的codereview
  3. 1704:baoge的洗漱难题[黄]
  4. c语言库文件是dll还是lib,C语言之静态链接库与动态链接库(2)
  5. 1的恢复出厂设置在哪里_罗斯蒙特变送器怎么恢复出厂设置?
  6. 前端共享桌面_2020 前端学习路线总结,哎呦,不错哦!
  7. php 获取每年的节假日,shell获取每年农历节日的日期
  8. qt结构体嵌套结构体方法_9.2 C++结构体类型变量
  9. java soot_正确执行3个地址代码的SOOT API
  10. 乐高计算机发展史教程,【乐高产品发展史特别篇】乐高恐龙发展史