模板类不支持分离式编译,那就必须放到同一个文件中吗?解决办法

模板类不支持分离式编译,那就必须放到同一个文件中吗?C/C++ code//test.htemplate class Tclass Test{pu

模板类不支持分离式编译,那就必须放到同一个文件中吗?

C/C++ code
//test.htemplate <class T>class Test{public:  void set(T a);  T get();private:T data; };//test.cpp#include "test.h"template <class T>T Test<T>::get(){ return data;}template <class T>void Test::set(T a){  data = a;}//main.cpp#include <iostream>#include "test.h"using namespace std;int main(){   Test<int> test;     test.set(10);  cout<<test.get(); return 1;}



这样的程序,链接时会提示找不到set()和get()。是因为c++模板类不支持分离式编译的问题。

如果把test.h 和test.cpp的内容都放到main.cpp中,肯定没问题,但c++就没有一种办法放到不同文件中吗?

[解决办法]
有个技巧,你分两个文件写,但是源文件不要include头文件,而是头文件include源文件,这样在预处理时又会合成一个头文件

这不算奇技淫巧,C++ Primer有直接介绍的
[解决办法]
头文件include源文件,您的意思是可以include cpp文件吗?
探讨

有个技巧,你分两个文件写,但是源文件不要include头文件,而是头文件include源文件,这样在预处理时又会合成一个头文件

这不算奇技淫巧,C++ Primer有直接介绍的

[解决办法]
探讨
头文件include源文件,您的意思是可以include cpp文件吗?

引用:

有个技巧,你分两个文件写,但是源文件不要include头文件,而是头文件include源文件,这样在预处理时又会合成一个头文件

这不算奇技淫巧,C++ Primer有直接介绍的

[解决办法]
探讨
所以说C++的模板是动态库的大敌啊,人家在写公用的模板库的时候,为了不让头文件过度膨胀,也为了方便封装动态库,苦心孤诣的把非模板的、能共用的代码段抽出来,写入动态库