首先我要介绍分离编译的概念?
一个程序由若干个原文件共同实现,每个源文件单独编译生成目标文件,然后再将所有的目标文件链接起来生成单一的可执行程序的过程.ps.我所理解的分离编译就是不在同一个.h或.cpp文件中定义和实现.
程序编程过程如图所示
生成的源文件即在对应的.h和.cpp文件组成编译单元(其中.h的代码被扩展到包含.h的.cpp文件里),然后编译器把.cpp问津编译为目标文件.obj文件(文件中有可执行文件的格式且已经是二进制码的形式),当编译器吧所有的.cpp文件分离编译完成.obj文件,周再由链接器把这些.obj文件链接起来形成可执行文件.exe文件.
为什么模板不支持分离编译
编译没有实例化,会导致链接错误,即模板函数的代码并不能直接变异成二进制代码,必须有一个实例化的过程.
例
------text.h----
template<class T>
class A
{
pubclic:
void fun();
}
------text.cpp----
#include"text.h"
tempalte<class