1 template specialization 模板特化

一般情况下类模板定义如下:

template<class Window, class Controller>
class Widget
{... 泛化实现代码 ...
};

特化是指把类模板中指定的class T变成具体的类型:

class Widget<ModalDialog, MyController>
{... 特化实现代码 ...
};

其中ModalDialog和MyController是你自己另外定义的类.
有了这个Widget的特化定义之后,如果你以后定义了Widget<ModalDialog, MyController>对象时,编译器就会使用上述的特化定义.
如果定义了其它泛型对象,那么编译器就是用原本的泛化定义.
这就是模板的特化.

2 template partial specialization 模板偏特化

模板特化是通过"给模板中的所有模板参数一个具体的类"的方式来实现的.而模板偏特化则是通过"给模板中的部分模板参数以具体的类,而留下剩余的模板参数仍然使用原来的泛化定义"的方式来实现的.

template<class Window>                        //仍然使用原来的泛化定义;
class Widget<Window, MyController>            //MyController是具体的类,是特化定义;
{... 偏特化实现代码 ...
};

模板的偏特化能力很强大.当你实例化一个模板时,编译器会把目前存在的偏特化模板和全特化模板做比较,并找出其中最合适、最匹配的实现.
这样,灵活性就很大.
模板的偏特化机制不能用在函数身上,不论成员函数还是非成员函数.

3 注意

  1. 虽然你可以全特化类模板中的成员函数,但是你不能偏特化他们;
  2. 你不能偏特化命名空间级别(namespace-level)的函数(non-member).最接近"命名空间级别模板函数"的偏特化机制就是函数重载,那就意味着你对"函数参数"(而非返回值类型或内部所用类型)有很精致的特化能力;
  3. 特化或全特化时,template后面的尖括号中不带任何内容;

Author: visaya fan <visayafan[AT]gmail.com or visayafan[AT]163.com>

Date: 2011-10-21 17:30:04

HTML generated by org-mode 6.33x in emacs 23

【C++模板】特化与偏特化 template [partial] specialization相关推荐

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

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

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

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

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

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

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

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

  5. C++模板之特化与偏特化详解

    2019独角兽企业重金招聘Python工程师标准>>> C++函数模板与类模板实例解析_C 语言_脚本之家 http://www.jb51.net/article/53746.htm ...

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

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

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

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

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

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

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

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

最新文章

  1. 2016年,C语言该怎样写
  2. lftp linux,linux下使用 lftp
  3. mysql备份与恢复 cat_MySQL备份和恢复具体实施
  4. Windows8之hyper-v探索
  5. BGP——本地优先级选路+BGP路由水平分割机制(讲解+配置命令)
  6. JS数据结构第六篇 --- 二叉树力扣练习题
  7. Please select Android SDK的解决
  8. 百度实习1,2,3面-教育知心搜索前端项目组
  9. (BISM)FTP搜索引擎BLOG开通了,专门交流搜索引擎技术
  10. 小卡机器人积木教程_一盒56种玩法!这套智能积木机器人秒杀家中99%的益智玩具!| 新年礼物...
  11. Python爬虫QQ空间
  12. WPS宏插件使用教程
  13. 视频剪辑素材哪里找?这个几个网站就够了。
  14. PHP项目汇报ppt模板,免费工作汇报模板(课堂PPT)
  15. 油猴脚本屏蔽CSND个人博客主页烦人广告
  16. 阿里架构师经验分享!写给即将正在找工作的Java攻城狮,吊打面试官
  17. MDaemon功能篇之优先级邮件
  18. 计算机怎样发现路由器上u盘,路由器USB插口的4个功能,你也许一个都不知道!...
  19. 教你十分钟写一个软件防火墙
  20. 操作系统原理分析实验

热门文章

  1. 242. 有效的字母异位词 golang
  2. WWW软件全球使用排名
  3. Xshell链接不上云服务器的解决方案
  4. BFPTR算法详解+实现+复杂度证明
  5. C++ 写时拷贝 2
  6. Linux select 实现并发服务器和客户端
  7. 701. 二叉搜索树中的插入操作
  8. 看完99%的人都学会了!9次Android面试经验总结,我先收藏为敬
  9. [TimLinux] Python 迭代器(iterator)和生成器(generator)
  10. 最感叹的莫过于一见如故,最悲伤的莫过于再见陌路。最深的孤独,是你明知道自己的渴望,却得对它装聋作哑。最美的你不是生如夏花,而是在时间的长河里,波澜不惊。...