1 什么是分离编译
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。
2 模板的分离编译
假如有以下场景,模板的声明与定义分离开,在头文件中进行声明,源文件中完成定义:
head.h
template <class T>
T Add(const T& left, const T& right);
head.cpp
#include "head.h"
template<class T>
T Add(const T& left,const T& right)
{
return left + right;
}
//模板定义位置显示实例化,调用一次具体类型就会生成,不推荐
void test()
{
Add(2, 4); //实例化生成add<int>
Add(3.0, 4.0); // 实例化add<double>
}
main.cpp
#include "head.h"
int main()
{
Add(2, 4);
Add(3.0, 5.0);
return 0;
}
报错:
原因:
解决方法:
- 将声明和定义放到一个文件 “xxx.hpp” 里面或者xxx.h其实也是可以的。推荐使用这种。
- 模板定义的位置显式实例化。这种方法不实用,不推荐使用。