三、模板分离编译
- 分离编译概念:
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式
- 模板分离编译:
假如有以下场景,模板的声明与定义分离开,在头文件中进行声明,源文件中完成定义
- 示例:
// a.h template<class T> T Add(const T& left, const T& right); // a.cpp template<class T> T Add(const T& left, const T& right) { return left + right; } // main.cpp #include"a.h" int main() { Add(1, 2); Add(1.0, 2.0); return 0; }
注:以上代码的模板分离编译会报错
- 分析:
- 解决方法
- 将声明和定义放到一个文件 “xxx.hpp” (h文件和cpp文件结合)里面或者xxx.h其实也是可以的(推荐)
- 模板定义的位置显式实例化(不实用)
四、模板总结
优点:
模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生
增强了代码的灵活性
缺陷:
模板会导致代码膨胀问题,也会导致编译时间变长(为了尽量减少此类问题,编译器会按需实例化)
出现模板编译错误时,错误信息非常凌乱,不易定位错误
不支持分离编译