一、包含模型有三种实现方式:
1、.cpp文件include到.h的末尾;
2、在所有用到该模板函数的地方,include .cpp文件,这也是比较常用的一个方式;
3、把.h和.cpp整合成一个.h文件
二、显式实例化:
我们可以仍像原来那样组织我们的代码:
.h中放声明,.cpp中放置定义,然后在main函数所在的.cpp中调用模板函数,然而这时我们需要提供另一个.cpp文件,该文件需要include放置模板函数定义的.cpp(有时候为了体现该.cpp是希望用来被include的,我们也将其扩张名改为.h),然后在该.cpp中,我们需要显式声明,只是注意:已经显式实例化的成员函数,不能再次实例化。
显式实例化的格式:template 返回值类型 函数名<数据类型>(具体函数类型 形参);
例如:template void func<double>(double const&);
三、分离模型
需要用到关键字export,尽管现在能支持export的编译器很少,但是将来有可能会受到重视。
export的使用是很简单的:再一个文件里定义模板,并在模板的定义和(非定义的)声明前面加上关键字export就可以了(必须写在template前面)。
我们只需要在第一个声明前面加上关键字就可以了(必须写在template前面),在以后的重复声明或者定义中会隐式的保留这个export声明。
注意:我们的export必须写在template前面。
export和inline不能同时使用,故在文件中,显式内联和隐式内联(类中定义函数)都不能被导出(export)。
当然,我们在实际使用中,可以利用预处理符号决定使用哪种模型,具体见C++ Templates。
文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppjs/20090410/164708.html)