类模版的定义和声明都和函数模版类似:

代码如下:

template <typename T>
class Stack
{
public:
void push(const T&);
void pop();
T top()const;
bool empty() const{return m_elems.empty();}
private:
vector<T> m_elems; };

类模版的使用时需要显示指定模版参数类型。

类模版成员函数的是在调用的时候实例化

template<typename T>
void Stack<T>::push(const T& elems)
{
m_elems.push_back(elems);
} template<typename U>
void Stack<U>::pop()
{
m_elems.pop_back();
}

参数推导过程,通过显示指定模版类型参数例如Stack<int> st;实例化一个模版类型是int的类st.pop()通过Stack<U>推导出U为int,然后依据函数模版的实例化方法实例化成员函数。

模版特化:作用是优化基于某种特定类型的实现。或者克服某种特定类型在实例化类模版时的不足。特化类模版时,同时要特化类中的成员函数,不然会造成,成员函数未定义现象。

template <>
class Stack<double>
{
public:
void push(const double&);
void pop();
double top()const;
//bool empty() const{return m_elems.empty();}
private:
vector<double> m_elems;
}; void Stack<double>::push(const double&)
{ }
void Stack<double>::pop()
{ }
double Stack<double>::top() const
{
return 0.1;
}

类模版的偏特化:偏特化也成为部分特化是特化一系列类型,实例化时不能产生二义性

根据特化,偏特化,普通实例化的优先级进行匹配

#include <iostream>
#include <string>
#include <vector>
using namespace std; template<typename T1,typename T2>
class Myclass
{ }; template<typename T>
class Myclass<T,T>
{ }; template<typename T>
class Myclass<T,int>
{ }; template<typename T1,typename T2>
class Myclass<T1*,T2*>
{ };
int main()
{
Myclass<int,float> m1;//调用第一个
Myclass<float,float> m2;//调用第二个
Myclass<float,int> m3;//调用第三个
Myclass<int*,int*> m4;//调用第四个 Myclass<int,int> m5;//产生二义性
return 0;
}

缺省模版实参

类模版缺省模版实参的优点是可以指定内部类型,以及自定义的容器

template<typename T,typename CONT = vector<T>>
class Stack
{
public:
void push(const T&);
void pop();
T top()const;
bool empty() const{return m_elems.empty();}
private:
CONT m_elems;
};

C++ Template之类模版的更多相关文章

  1. template.js 模版内调用外部JS方法

    template.js 一款 JavaScript 模板引擎,简单,好用.提供一套模板语法,用户可以写一个模板区块,每次根据传入的数据,生成对应数据产生的HTML片段,渲染不同的效果.模版定义如下: ...

  2. Template 制作模版

    直接写在选项里的模板 直接在构造器里的template选项后边编写.这种写法比较直观,但是如果模板html代码太多,不建议这么写. var vm = new Vue({ el:"#app&q ...

  3. vue中Template 制作模版

    一.直接写在选项里的模板 直接在构造器里的template选项后边编写.这种写法比较直观,但是如果模板html代码太多,不建议这么写. javascript代码: var app=new Vue({ ...

  4. .NET设计模式(16):模版方法(Template Method)(转)

    摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...

  5. NET设计模式 第二部分 行为型模式(15):模版方法模式(Template Method)

    摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...

  6. vue-cli的webpack模版,相关配置文件dev-server.js与webpack.config.js配置解析

    1.下载vue-cli npm install vue-cli -g vue-cli的使用与详细介绍,可以到github上获取https://github.com/vuejs/vue-cli 2.安装 ...

  7. C++设计模式 之 “组件协作”模式:Template Method、Strategy、Observer

    “组件协作”模式: #现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式. #典型模式: Templ ...

  8. c++官方文档-模版类

    #include <iostream> using namespace std; template<class T> class MyPair { private: T t[] ...

  9. Template简介

    分类   ControlTemplate ItemsPanelTemplate DataTemplate 样式Style和模板Template对比 Style:样式,风格Template:模版,某种控 ...

随机推荐

  1. hbase与Hadoop

    Hbase是一种低延迟的在线系统,Hadoop是优化吞吐量的离线系统.这种互补关系造就了一种强大的.灵活的数据平台,可以用来搭建水平扩展的数据应用.

  2. spark概论,补充

    基本概念 RDD spark最大的亮点是提出RDD(Resilient Distributed Dataset)的概念,也就是可伸缩的分布式数据集合,本身只读,可恢复.spark本身不做物理储存,通过 ...

  3. 生日蛋糕 (codevs 1710) 题解

    [问题描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri,高度为Hi的圆柱 ...

  4. C# 平时碰见的问题【4】

    1. 模糊查询 like的参数化写法 string keyword="value"; // 要模糊匹配的值 错误示范:   sql:    string strSql=" ...

  5. JVM调优总结10-调优方法

    JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪.详细说明参考这里 ...

  6. [css filter]filter在界面实现滤镜效果

    最近逛当当,发现当当尾品会的首页推荐最底端的商品链接是灰色的图片,然后鼠标hover之后就会变成正常的彩色 肯定不是通过img来改变的,然后直接看了一下源码,其实是用的filter属性 _(:з」∠) ...

  7. 浅谈iOS网络编程之一入门

    计算机网络,基本上可以抽象是端的通信.实际在通讯中会用到不同的设备,不同的硬件中,为了能友好的传输信息,那么建立一套规范就十分必要了.先来了解一些基本概念 了解网络中传输的都是二进制数据流.  2.了 ...

  8. Mybatis动态SQL

    1.动态SQL基本标签 •if •choose (when, otherwise) •trim (where, set) •foreach 2.IF 具体用法 <select id=" ...

  9. oracle11g 新特性 - rman自动备份控制文件延迟

    OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 -6 ...

  10. [Java][RCP] 记 ProgressView的使用

    进度条效果图