C++ 模板类定义与声明

来源:互联网 发布:淘宝网健身护腕 编辑:程序博客网 时间:2024/04/30 15:26
 

C++ 模板类定义与声明

声明和使用类模板: 如果在类模板外定义成员函数,应写成类模板形式:
template<class 虚拟类型参数>
函数类型 类模板名<虚拟类型参数>∷成员函数名(函数形参表列) {…}

测试的模板类,如下:
//Compare.h
#ifndef _COMPARE_H
#define _COMPARE_H

template <typename T>
class Compare
{
public:
 ~Compare(void);
 Compare(T,T);
 T max();
 T min();
private:
 T x;
 T y;
};
#endif

//Compare.cpp
#include "Compare.h"
template <typename T>
Compare<T>::Compare(T a,T b)
{
 x=a;
 y=b;
}
template <typename T>
Compare<T>::~Compare(void)
{
}
template <typename T>
T Compare<T>::max()
{
 return (x>y)?x:y;
}
template <typename T>
T Compare<T>::min()
{
 return (x<y)?x:y;
}
单单上面两个文件在,VS2008编译成功,然后加了下面的main函数就出现错误了。
#include <iostream>
using namespace std;
#include "Compare.h"
int main()
{
 Compare<int> tt(1,2);
              cout<<tt.max()<<endl;
 system("pause");
 getchar();
 return 0;
}
找了半天仍然找不着什么原因。提示错误:public: __thiscall Compare<int>::~Compare<int>(void)"

后来查资料,才知道现在的编译器均不支持,类模板定义与实现分享。
于是把Compare.cpp的内容剪切到了,Compare.h中,发现正常了。网上还有一种方法,说是用export加在template前,此方法在VS2008仍然无法通过。提示,该关键字export保留,可能以后会用到...

总结:在现阶段大部分的编译器,模板定义与模板声明得放一起方可编译成功