摘要: 非类型模板参数是通过基本变量类型引入,例如int,在使用时必须显式自定值,不能通过推断。非类型模板参数的限制:不能是浮点数(在vc6.0上测试可以为浮点型),对象以及指向内部链接对象的指针。#include #include #include using namespace std;enum COLOR{WHITE,BLACK};template//OKint process (double v){ return v*name;}template class Myclass{};const char s1[] = "hello";extern const char s2[] 阅读全文
posted @ 2013-07-24 23:25 l851654152 阅读(3800) 评论(0) 推荐(0) 编辑
摘要: 类模版的定义和声明都和函数模版类似:代码如下:template class Stack{public: void push(const T&); void pop(); T top()const; bool empty() const{return m_elems.empty();}private: vector m_elems; };类模版的使用时需要显示指定模版参数类型。类模版成员函数的是在调用的时候实例化templatevoid Stack::push(const T& elems){ m_elems.push_back(elems);}templatevoid Stac 阅读全文
posted @ 2013-07-24 14:43 l851654152 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 函数模版的定义:template T const& max(const T& a,const T b){ return a > b ? a:b;}int main(){ return 0;}函数模版的使用:#include #include using namespace std;template T const& max(const T& a,const T b){ return a > b ? a:b;}int main(){ int i = 7; cout << max(34,7) <<endl; double j = 阅读全文
posted @ 2013-07-24 07:56 l851654152 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 一.使用Templates的原因:例如我们要写一个算法,由于类型不同,我们不得不做一下工作。1.使用宏定义代替Templates不利于类型检查。2.将一些算法放在基类里,以后的扩展的子类都需要充基类继承这些算法,不利于维护和扩展。3.重复一遍有一遍的根据不同类型写出算法,显然是一个很糟糕的决定。二.引入模版的定义关键字template,引入类型参数的关键字typename/class尽量用typename,类型参数一般用U,T,V等。三.在编译过程中并不是把函数模版编译成能处理任何类型的实例,而是实例化模版参数的每种类型。四.在实例化之前检查模版是否有语法错误,在实例化期间检查是否所有调用都有 阅读全文
posted @ 2013-07-24 07:47 l851654152 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 设计模式的学习以及各种设计模式的C++实现已经告一段落了,解释器模式和迭代器模式,以及模版办法简单的看了一下。画UML图的时候再重点学习从今天开始学习Templates。 阅读全文
posted @ 2013-07-24 07:44 l851654152 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 状态模式原理:随着状态的变化,对象的行为也发生变化代码如下:#include #include #include using namespace std;class War;class State{public: virtual void fire(War *war) { }};class War{public: War(State* state):m_state(state),m_day(0){} void Setday(int day) { m_day = day; } int Getday() { return m_day; } void SetState(State *stat... 阅读全文
posted @ 2013-07-24 01:00 l851654152 阅读(248) 评论(0) 推荐(0) 编辑