zoukankan      html  css  js  c++  java
  • 31、模板函数和模板类的特例化

    引入原因 :

    编写单一的模板,它能适应多种类型的需求,使每种类型都具有相同的功能,但对于某种特定类型,如果要实现其特有的功能,单一模板就无法做到,这时就需要模板特例化

    定义 :

    对单一模板提供的一个特殊实例,它将一个或多个模板参数绑定到特定的类型或值上

    (1)模板函数特例化

      必须为原函数模板的每个模板参数都提供实参,且使用关键字template后跟一个空尖括号对<>,表明将原模板的所有模板参数提供实参,举例如下:

    本质:

    特例化的本质是实例化一个模板,而非重载它。特例化不影响参数匹配。参数匹配都以最佳匹配为原则。例如,此处如果是compare(3,5),则调用普通的模板,若为compare(“hi”,”haha”)则调用特例化版 本(因为这个cosnt char*相对于T,更匹配实参类型),注意二者函数体的语句不一样了,实现不同功 能。

     注意:

    模板及其特例化版本应该声明在同一个头文件中,且所有同名模板的声明应该放在前面,后面放特例化版本。

    (2)类模板特例化 原理类似函数模板,不过在类中,我们可以对模板进行特例化,也可以对类进行部分特例化。对类进行 特例化时,仍然用template<>表示是一个特例化版本,例如:

    类模板的部分特例化

     不必为所有模板参数提供实参,可以指定一部分而非所有模板参数,一个类模板的部分特例化本身仍是 一个模板,使用它时还必须为其特例化版本中未指定的模板参数提供实参(特例化时类名一定要和原来的 模板相同,只是参数类型不同,按最佳匹配原则,哪个最匹配,就用相应的模板)

    特例化类中的部分成员

    可以特例化类中的部分成员函数而不是整个类,举个例子:

  • 相关阅读:
    nginx升级步骤
    对一些信息进行正则校验
    对list对象进行排序
    文件上传实现ajax假异步
    解决springmvc+fastjson返回页面出现乱码问题
    php opcode缓存
    node.js 抓取
    mysql 好文章
    rabbitmq 安装
    配置安装nginx
  • 原文地址:https://www.cnblogs.com/crbhf/p/14923085.html
Copyright © 2011-2022 走看看