C++ Template之类模版
类模版的定义和声明都和函数模版类似:
代码如下:
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之类模版的更多相关文章
- template.js 模版内调用外部JS方法
template.js 一款 JavaScript 模板引擎,简单,好用.提供一套模板语法,用户可以写一个模板区块,每次根据传入的数据,生成对应数据产生的HTML片段,渲染不同的效果.模版定义如下: ...
- Template 制作模版
直接写在选项里的模板 直接在构造器里的template选项后边编写.这种写法比较直观,但是如果模板html代码太多,不建议这么写. var vm = new Vue({ el:"#app&q ...
- vue中Template 制作模版
一.直接写在选项里的模板 直接在构造器里的template选项后边编写.这种写法比较直观,但是如果模板html代码太多,不建议这么写. javascript代码: var app=new Vue({ ...
- .NET设计模式(16):模版方法(Template Method)(转)
摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...
- NET设计模式 第二部分 行为型模式(15):模版方法模式(Template Method)
摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...
- 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.安装 ...
- C++设计模式 之 “组件协作”模式:Template Method、Strategy、Observer
“组件协作”模式: #现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式. #典型模式: Templ ...
- c++官方文档-模版类
#include <iostream> using namespace std; template<class T> class MyPair { private: T t[] ...
- Template简介
分类 ControlTemplate ItemsPanelTemplate DataTemplate 样式Style和模板Template对比 Style:样式,风格Template:模版,某种控 ...
随机推荐
- 转载:T-SQL语句大全
一.基础 1.创建数据库 CREATE DATABASE database-name 2.删除数据库 drop database dbname 3.备份数据库 --- 创建 备份数据的 device ...
- Ajax与Json的一些总结
Ajax与Json AJAX=异步javaScript 和XML AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新. 这意味着可以在不 ...
- SequoiaDB的数据分区操作
在SequoiaDB集群环境中,用户往往将数据存放在不同的逻辑节点与物理节点中,以达到并行计算的目的. 分区:把包含相同数据的一组数据节点叫一个分区,如上图绿色方块组成三个分区. 分区键:切分时,所依 ...
- 十款基础级WordPress插件
1.Akismet插件 Akismet是全球最受欢迎的反垃圾插件,专为对抗"博客spam"."评论spam"而生.Akismet是WordPress官方插件之一 ...
- 006-python基础-条件判断与循环
一.条件判断 场景一.用户登陆验证 # 提示输入用户名和密码 # 验证用户名和密码 # 如果错误,则输出用户名或密码错误 # 如果成功,则输出 欢迎,XXX! #!/usr/bin/env pytho ...
- ios 总结
1 ocoa Touch Layer{ App Extensions https://developer.apple.com/library/ios/documentation/General/Con ...
- Spring IOC 方式结合TESTGN测试用例,测试简单java的命令模式
java命令模式: 可以命令("请求")封装成一个对象,一个命令对象通过在特定的接收着上绑定一组动作来封装一个请求.命令对象直接把执行动作和接收者包进对象中,只对外暴露出执行方法的 ...
- Linux编译内核提示'make menuconfig' requires the ncurses libraries错误
原来使用的ubuntu 11.10系统由于误操作,导致系统崩溃,重新安装了ubuntu 11.10: 在编译内核的时候,提示如下错误: dingq@wd-u1110:~/hwsvn/2sw/1prj_ ...
- Android--调用系统的DownLoadManager去下载文件
代码里面有详细的注释: /** * 该方法是调用了系统的下载管理器 */ public void downLoadApk(Context context,String url){ /** * 在这里返 ...
- android几种定时器机制及区别
在android中,经常用到的定时器主要有以下几种实现:一.采用Handler与线程的sleep(long )方法二.采用Handler的postDelayed(Runnable, long) 方法三 ...