C++将类模板和函数模板的分文件实现

例如:

类模板
template

class DString{
public:
char text[maxLength];
public:
static const int size=maxLength;
friend ofstream& operator <<(ofstreamoutput,const DString& str1);
friend ifstream& operator >>(ofstreaminput,const DString& str1);
};

//其友元函数函数也涉及模板
template

ofstream& operator <<(ofstreamoutput,const DString& str1){
for(int i=0;i output.put(str1.text[i]);
}
}
template
ifstream& operator >>(ifstreaminput,const DString& str1){
for(int i=0;i input.get();
}
}

如果要求是
template

class DString{
public:
char text[maxLength];
public:
static const int size=maxLength;
friend ofstream& operator <<(ofstreamoutput,const DString& str1);
friend ifstream& operator >>(ofstream input,constDString& str1);
};
放在一个.h文件中,而
template

ofstream& operator <<(ofstreamoutput,const DString& str1){
for(int i=0;i output.put(str1.text[i]);
}
}
template
ifstream& operator >>(ifstream input,constDString& str1){
for(int i=0;i input.get();
}
}
放在一个cpp文件中,这种写法是符合C++标准的,但是目前的编译器基本不支持,据说有一个商业编译器支持。
可以参考下boost,一般模板类都是全部写在一个.h文件中。
另外上面的程序有好几个警告。
以下修改过,用g++编译通过。
#include

#include
using namespace std;

template
class DString{
public:
char text[maxLength];
public:
static const int size=maxLength;
friend ofstream& operator <<(ofstreamoutput,const DString& str1){
for(int i=0;i output.put(str1.text[i]);
}
return output;
}
friend ifstream& operator >><>(ofstream input,const DString& str1);
}
//其友元函数函数也涉及模板
/*
template
ofstream& operator <<(ofstreamoutput,const DString& str1){
for(int i=0;i output.put(str1.text[i]);
}
return output;
}*/
template
ifstream& operator >>(ifstreaminput,const DString& str1){
for(int i=0;i input.get();
}
return input;
}
int main(int argc, char *argv[])
{

return 0;
}

你可能感兴趣的:(C++,C/C++/C#开发实战365)