上C++课程的时候老师总是鼓吹模板如何重要,但是真正上课时候却将该部分跳过。平时做项目写程序虽然天天接触STL,但说到如何实现模板真的是道不出其一二。现将这几天看C++Primer中的一些重要概念提取出来,以备不时之需。
1,模板的用处。
模板其实也是多态思想的一种体现,不过不是C++那个运行时多态,而是编译时多态。那么用在什么地方呢?个人感觉用的最多的是在数据结构中,一些经典的数据结构(Queue,Stack)用模板类实现确实事半功倍。至于其他地方嘛。。。也许是自己的功力不够,几乎就没有用过(设计模式不也是一样的道理嘛,囧)
2,模板定义
模板函数定义:
template<typename T>
int compare(const T &v1,const T &v2);
内联函数:
inline template<typename T> int compare(const T &v1,const T &v2);
模板类定义:
template<class Type> class Queue
{
public:
Queue();
Type T& front();
//......
}
3,模板类实例化
Queue<int> qi;
其实这个不就是和STL一模一样嘛?确实是的,STL不就是帮我们这些经典的数据结构一一实现了嘛?
4,友元的在模板类的使用
friend class Queue<Type>;
这样就将Queue这个模板类设为了友元,之前必须要有Queue<Type>的声明,如template<class Type> class Queue;
5,static在模板类中
一个模板类会有多个static实例成员,但每种类型的模板类只有一个static成员!
比如说Queue<int>有一个static成员,Queue<string>也有一个static成员
讨论:
如果你讨厌链接错误,那么你一定觉得模板这个东西是让人讨厌的,起码编译器是很讨厌模板的,要知道在实例化时才会确定模板中T的类型,再根据他生成相应的代码是件很麻烦的事情,模板类在这个问题上显得尤其麻烦。
一般写类都是将定义和声明放在两个文件中的,这样清晰明了,但是在模板类中绝对不可以!编译器会找不到你定义的那些方法!
所以说,写模板类的话就请写在一个文件中吧,MS到现在还把export留作未来使用的关键字在,我们暂时就不要指望这个了吧!