包含编译

深入探讨vc下C++模板编译模型

霸气de小男生 提交于 2019-12-07 19:07:55
写过模板的朋友也许知道,一个模板程序,当编译器看到模板定义时并不立即产生代码,只有在我们用到模板,并对其实例化的时候,才会产生特定的实例。此时,编译器就要访问定义模板的源代码了。如果源代码不可访问,当然,编译器会报错的。记得我初学的时候,采用的是直接将声明和实现全部放在一个.h里面这个方法。但是,有时候我们确实想在.h文件中声明,在CPP文件中实现,从而实现文件分离。那么下面我就写写一般模板函数,模板类,模板特化的文件分离,我自己的心得。 在《C++primer》 中讲解了C++ 编译模板代码的两种模型 :(1)包含编译 (2)分别编译 (1)包含编译模型:可以通过在声明函数模板或类模板的头文件中添加一条#include指示使定义可用,从而引入包含相关定义的源文件 // header file utlities.h #ifndef UTLITIES_H #define UTLITIES_H template <class T> int compare(const T&, const T&); ...... #include "utilities.cpp" #endif //implementation file utlities.cpp template <class T> int compare(const T &v1,const T &v2) { //implemente ..