`

为什么模板要写在.h里面

阅读更多
//test.h 
template<typename T> 
class A{ 
public: 
    A(); 
    void fun(); 
}; 

//test.cpp 
#include"test.h" 
template<typename T> 
A<T>::A(){} 

template<typename T> 
void A<T>::fun(){} 

main.cpp
int main(){ 
    A<int> a;//undefined reference to `A<int>::A()'? 
} 
解决办法是#include"test.cpp",如果在gcc下用命令行那么只能#include"test.cpp",
如果同时#include"test.h",则出现 class 重复定义的错误
这其实是模板包含模型,它增加了包含test.cpp的开销。
还有一个叫分离模型,即用export,在一个文件里面定义模板,并在模板的定义和(非定义的)声明的前面加上关键字export.这是c++标准里面规定的,但遗憾的是没有流传开来,没有得到大公司的支持。所以只能用包含模型了,为了减少开销,开发时模板一般都写在头文件里面了
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics