<<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關鍵字了?