早上晒晒太阳

My way ahead is a long long one oh  I will seek my beauty high and low

VC的模板写法

  模板在没有实例化之前是无法编译的,因为没有使用类型实例化的模板是不能生成代码的。所以一般处理模板的方法是,将模板的声明和定义都放到一个.h文件之中,或者使用export关键字,但是后者在很多C++编译器实现(如:VC)中不被支持.
  如果说硬要把声明和定义分开来写的,也是可以的,不过用起来就不好了!例如,要做一个Stack,会在main中调用Stack<int> s;这样的语句,那么就必须在Stack.cpp文件的后面加上一句template class Stack<int>;

 1 template <class T>
 2 class Stack
 3 {
 4 public:
 5     Stack();
 6     ~Stack();
 7 public:
 8     void pop();
 9     //
10 };

 1 #include "Stack.h"
 2 
 3 template <class T>
 4 Stack<T>::Stack(void)
 5 {}
 6 
 7 template <class T>
 8 Stack<T>::~Stack(void)
 9 {}
10 
11 template <class t>
12 void Stack<T>::pop()
13 {
14     //
15 }
16 
17 template class Stack<int>;


  可以看出,用户要用其它类型的Stack的话就必须在Stack.cpp文件中加入具体的类型.不然就会出现类似这样的错误提示:
  error LNK2019: 无法解析的外部符号 "public: __thiscall Stack<int>::~Stack<int>(void)" (??1?$Stack@H@@QAE@XZ),该符号在函数 _main 中被引用
  所以,还是所声明与定义都会在.h文件中吧.

posted on 2006-11-29 20:24 结斌 阅读(716) 评论(2)  编辑 收藏 引用

评论

# re: VC的模板写法 2007-05-10 23:45 zhanghui

强  回复  更多评论   

# re: VC的模板写法 2007-08-01 14:59 ZHUKAIJIE

@zhanghui
谢谢  回复  更多评论   


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