随笔分类 -  C++ Templates

摘要:#ifndef POW3_H#define POW3_Htemplate class Pow3{public: enum{result = 3 * Pow3::result};};templateclass Pow3{public: enum{result = 1};};#endif此代码计算三的N次方。#ifndef POW3_H#define POW3_Htemplate class Sqrt{public: enum{mid = (LO + HI + 1)/2}; enum{result = (N ::result:Sqrt::result};};templateclass Sqrt{p 阅读全文
posted @ 2013-08-12 22:37 l851654152 阅读(239) 评论(0) 推荐(0)
摘要:模板一共有三种类型:1.第一种包含模型:包含模型是讲模板的定义和声明都放在头文件里(注:一般我们写的代码是将声明放在头文件里,实现放在cpp里,防止产生两份实现代码)缺点:包含模型会增加代码的量。如果在不同文件里有两个相同的类型调用则会产生两份相同实现,C++编译器可以自己处理这个问题。2.手动实例化示例:template void print_type(double const& x);缺点:造成混乱3.分离模型分离模型是在声明和定义处都使用export关键字即可,用的较少。 阅读全文
posted @ 2013-07-25 16:36 l851654152 阅读(247) 评论(0) 推荐(0)
摘要:1.对于T是自定义类型的,如果存在子类型则需要在模版内部加上typename示例代码:templateclass Myclass{ typename T::SubType *ptr;//需要加上typename不然编译器可能误解为是静态对象SubType和ptr相乘};2.类模版里对基类成员函数的调用使用BASE::exit();和this->,避免调用的是外部全局函数,但是在vc6.0上面这条规则是先调用的BASE里面的函数。示例代码:#include #include #include using namespace std;void exit(){ cout class BaseM 阅读全文
posted @ 2013-07-25 10:02 l851654152 阅读(2209) 评论(0) 推荐(0)
摘要:非类型模板参数是通过基本变量类型引入,例如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 阅读(3815) 评论(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 阅读(274) 评论(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 阅读(282) 评论(0) 推荐(0)
摘要:一.使用Templates的原因:例如我们要写一个算法,由于类型不同,我们不得不做一下工作。1.使用宏定义代替Templates不利于类型检查。2.将一些算法放在基类里,以后的扩展的子类都需要充基类继承这些算法,不利于维护和扩展。3.重复一遍有一遍的根据不同类型写出算法,显然是一个很糟糕的决定。二.引入模版的定义关键字template,引入类型参数的关键字typename/class尽量用typename,类型参数一般用U,T,V等。三.在编译过程中并不是把函数模版编译成能处理任何类型的实例,而是实例化模版参数的每种类型。四.在实例化之前检查模版是否有语法错误,在实例化期间检查是否所有调用都有 阅读全文
posted @ 2013-07-24 07:47 l851654152 阅读(349) 评论(0) 推荐(0)
摘要:设计模式的学习以及各种设计模式的C++实现已经告一段落了,解释器模式和迭代器模式,以及模版办法简单的看了一下。画UML图的时候再重点学习从今天开始学习Templates。 阅读全文
posted @ 2013-07-24 07:44 l851654152 阅读(166) 评论(0) 推荐(0)