<<c++ primer>>里面说,编译模板函数的时候C++支持两种模式,一种是包含模式,就是把模板函数的声明和实现都放在同一个文件里面,我注意到STL就是这样的,而且sgi和vc的实现都是如此,也许是因为早期对模板的支持不太好的缘故吧;另一种是分离编译模式,可以把模板函数的声明和实现分开在头文件和.cpp文件中,此时需要编译器支持关键字export.
测试的代码如下,非常的简单:
头文件里面的声明:
template <class T>
void test(T n); .cpp文件里面的实现,注意书写的格式:
export // 前面加上关键字export
template <class T>
void test(T n)
{
std::cout << "n = " << n << std::endl;
}
我用vc和gcc分别的编译了一下,VC(我用的是7.1)中根本就不能识别export关键字,但是gcc下面可以编译过去.但是如果把export关键字去掉那么两个编译器都是可以编译过去的,而且也没有对函数的结果产生影响,这是否说明现在已经不再需要这个export关键字了?