The Programming world of Alex

C++模板内容拾遗

上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留作未来使用的关键字在,我们暂时就不要指望这个了吧!

posted on 2009-03-11 19:56 Alex@VCC 阅读(1430) 评论(1)  编辑 收藏 引用 所属分类: C++程序设计

评论

# re: C++模板内容拾遗 2009-03-18 14:14 江洪

工整,赞一个  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2010年6月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

导航

统计

常用链接

留言簿(5)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜