C++中實現代碼復用有兩個方式:類的繼承(即實現了多態),以及模板的使用。這里介紹的模板的知識。
模板的目的:
同樣的代碼適用于不同類型下的使用,實現代碼的復用目的。
模板的原理:
編譯階段,由編譯器根據給如的模板類型確定具體該產生出什么類(當編譯器編譯到此處才產生出該具體的類),因此,模板的處理其實是編譯階段就完成了,相當于編譯器編譯階段自動幫我們生成了大量的不同類型的類的代碼,減少了我們的編碼量,同時運行時候高效率。所以,c++強大,其實可以說是它的編譯器牛逼!
模板的形式:
模板類,模板全局函數,模板類中的成員函數,注意,沒有模板成員變量(如果想要成員變量也是模板的,那么就整個類弄成模板類,此時成員函數也可以模板化了)。
模板編寫:
模板函數的定義(無論是全局函數還是一個類的成員函數),必須與聲明在同一個文件中,不能聲明在.h文件,定義寫在.cpp文件,這是不可以的,因為編譯器編譯到該模板函數時候,它需要知道函數的內部實現,根據給入的類型來生成具體的函數,所以沒有定義的話就會直接報錯了(因為此時編譯器是不會去別的文件尋找其定義的,還沒到鏈接階段呢,更不會尋找其它文件的信息)
template <class Return, class Class>
用class或者typename都可以,一樣的作用
模板類定義:
使用的時候,總是需要我們帶著Name<Xx, Xx>這樣指定傳入的類名,因為這樣才是一個實際的類,而Name<Xx, Yy>,就跟前面這個類不是同一個類的
模板的特化
模板特化:就是在實例化模板時,對特定類型的實參進行特殊處理,即實例化一個特殊的實例版本。目的:對于一些特殊的類型,仍然能使得保持用戶調用接口不變。C++模板(函數模板/類模板)_c++ 模板成員函數_DR5200的博客-CSDN博客
模板的使用例子:
這里,我用qt寫了個線程管理的例子,封裝了一個非常方便的線程類,就是用的模板方式,其中用到了模板類,模板成員函數,值得參考一下:qt自己實現方便的線程管理類_我是標同學的博客-CSDN博客
c++模板的使用,需要了解和注意的就是上面這些內容了,關于一些具體知識,可以參考如下博客:
C++——模板(超詳細的模板解析)_c++模板___JAN__的博客-CSDN博客
qt使用模板template,報錯無法解析外部符號_Y_Hanxiao的博客-CSDN博客
20200403 - 模板函數實現和聲明必須在同一個頭文件里_模板函數的聲明與實現_baihebeijixing的博客-CSDN博客
C++類模板_小梁今天敲代碼了嗎的博客-CSDN博客
C++ 模板(Template)總結,長點小知識_函數_類型_int
C++類模板(模板類)詳解
C++模板的使用_c++模板函數調用_sg-expert的博客-CSDN博客
C++函數模板_coal miner的博客-CSDN博客