c類模板實(shí)例化例子 c 語言教程
這個特性稱為導(dǎo)出模板,第一個模擬考試模板。它的功能是使模板代碼與.H中的C/C語言分離和.Cpp文件分開,減少冗長的模板編譯時間。否則,模板實(shí)例需要在不同的編譯單元中實(shí)例化。導(dǎo)出模板以前是寫進(jìn)c98標(biāo)
這個特性稱為導(dǎo)出模板,第一個模擬考試模板。它的功能是使模板代碼與.H中的C/C語言分離和.Cpp文件分開,減少冗長的模板編譯時間。否則,模板實(shí)例需要在不同的編譯單元中實(shí)例化。導(dǎo)出模板以前是寫進(jìn)c98標(biāo)準(zhǔn)的,但是很少有主流編譯器支持這個特性。在最新的c11標(biāo)準(zhǔn)中,它已經(jīng)被刪除,并被使用extern關(guān)鍵字替換,以防止編譯器在編譯單元中實(shí)例化特定的模板。導(dǎo)出模板的實(shí)現(xiàn)原理摘自《C模板編程的深入實(shí)踐》。
這有點(diǎn)類似于C編譯器處理全局類對象實(shí)例構(gòu)造的過程。它們需要在主函數(shù)之前構(gòu)造。然而,現(xiàn)代編譯器的常見模板實(shí)現(xiàn)是在編譯單元中當(dāng)場生成實(shí)例,然后隨機(jī)選擇其中一個重復(fù)實(shí)例進(jìn)行鏈接。然而,為了支持導(dǎo)出模板,需要對現(xiàn)有的編譯器進(jìn)行很大的修改??紤]到人力和時間成本,以及替代方法,導(dǎo)出模板被大多數(shù)編譯器放棄。所以C的模板庫必須是開源的^
函數(shù)模板定義一組函數(shù)模板<class T>T*testfun(T*SRC){return(SRC)}實(shí)例化模板函數(shù)int m[10]int*P=testfun<int>(m)類模板定義一組類模板<class T>class testclass{public:T*testfunc(t*SRC)}實(shí)例化類模板char first ch[10]TestClass<char> achar*p=a.testfunc(ch)