<<c++ primer>>里面說,編譯模板函數(shù)的時(shí)候C++支持兩種模式,一種是包含模式,就是把模板函數(shù)的聲明和實(shí)現(xiàn)都放在同一個(gè)文件里面,我注意到STL就是這樣的,而且sgi和vc的實(shí)現(xiàn)都是如此,也許是因?yàn)樵缙趯?duì)模板的支持不太好的緣故吧;另一種是分離編譯模式,可以把模板函數(shù)的聲明和實(shí)現(xiàn)分開在頭文件和.cpp文件中,此時(shí)需要編譯器支持關(guān)鍵字export.
測(cè)試的代碼如下,非常的簡(jiǎn)單:
頭文件里面的聲明:
template?<class?T>
void?test(T?n);.cpp文件里面的實(shí)現(xiàn),注意書寫的格式:
export?//?前面加上關(guān)鍵字export
template?<class?T>
void?test(T?n)


{
????std::cout?<<?"n?=?"?<<?n?<<?std::endl;
}

我用vc和gcc分別的編譯了一下,VC(我用的是7.1)中根本就不能識(shí)別export關(guān)鍵字,但是gcc下面可以編譯過去.但是如果把export關(guān)鍵字去掉那么兩個(gè)編譯器都是可以編譯過去的,而且也沒有對(duì)函數(shù)的結(jié)果產(chǎn)生影響,這是否說明現(xiàn)在已經(jīng)不再需要這個(gè)export關(guān)鍵字了?