如何C++使用模板特化功能
前言:
通過定義模板,使得函數(shù)或者類不依賴于特定的類型,這樣大幅提升了代碼的復(fù)用性。
然而,不管是類模板還是函數(shù)模板,對所有的類型都是采用相同的處理方式(同一份代碼)。為此,C++提出了“模板特化的概念”,對特定類型提供模板的改造。
比如,對于函數(shù)模板來說,可以通過特化指定特定的類型,針對此特定類型對函數(shù)體內(nèi)容進行重寫,使得函數(shù)對特定類型實現(xiàn)特定功能。
注意:
按照語法,對函數(shù)模板和類模板進行特化后,就變?yōu)槠胀ê瘮?shù)和普通的類,而不再是模板。
1、函數(shù)模板的特化
對于函數(shù)模板來說,其特化語法如下:
template <>
返回類型 已定義的函數(shù)模板名<具體類型>(參數(shù)表){
針對特定類型的具體實現(xiàn);
}
其中“template <>
”是特化的固定格式。下面的例子定義了函數(shù)模板play(),并對此模板進行特化,特化過程中指定具體類型為“int”:
// 已定義好的函數(shù)模板 template <class Q> void play(Q p) { ?? ?printf("play with Q! \n"); } // 對以定義好的函數(shù)模板play()進行特化 template <>? void play<int>(int) { ?? ?printf("play with int! \n"); }
2、類模板的特化
類模板進行特化的語法如下:
template <>
class 類模板名<具體類型>{
類定義;
}
類模板的成員函數(shù)在類外實現(xiàn)時,語法如下:
返回類型 類模板名<具體類型>::函數(shù)名{
函數(shù)體;
}
下面是對類模板Duck進行特化的代碼,特化過程中指定了類型為"int
":
template <class T> class Duck { public: ?? ?void run() { printf("T run! \n"); } }; // 對類模板Duck進行特化 template <> class Duck<int> { public: ?? ?void run(); }; // 成員函數(shù)在模板類以外實現(xiàn) void Duck<int>::run() { ?? ?printf("int run! \n"); }
到此這篇關(guān)于如何C++使用模板特化功能的文章就介紹到這了,更多相關(guān)C++模板特化功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)經(jīng)典10大排序算法刨析
這篇文章主要介紹了C語言中常用的10種排序算法及代碼實現(xiàn),開發(fā)中排序的應(yīng)用需要熟練的掌握,因為是基礎(chǔ)內(nèi)容,那C語言有哪些排序算法呢?本文小編就來詳細說說,需要的朋友可以參考一下2022-02-02詳解MFC/C++調(diào)用易語言的整數(shù)型和文本型與VS2010互動
在本篇文章里我們給大家分享了MFC/C++調(diào)用易語言的整數(shù)型和文本型與VS2010互動相關(guān)知識點內(nèi)容,有興趣的朋友們可以參考下。2018-11-11基于OpenCV讀取攝像頭實現(xiàn)單個人臉驗證MFC程序
這篇文章主要為大家詳細介紹了基于OpenCV讀取攝像頭實現(xiàn)單個人臉驗證MFC程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08STL區(qū)間成員函數(shù)及區(qū)間算法總結(jié)
這篇文章主要匯總介紹了STL區(qū)間成員函數(shù)及區(qū)間算法,有需要的小伙伴可以參考下。2015-07-07C語言中怎么在main函數(shù)開始前執(zhí)行函數(shù)
C語言中怎么在main函數(shù)開始前執(zhí)行函數(shù)呢?下面小編就大家詳細的介紹一下。需要的朋友可以過來參考下,希望對大家有所幫助2013-10-10淺談關(guān)于指針作為參數(shù)并改變它的值的問題
這篇文章介紹了關(guān)于指針作為參數(shù)并改變它的值的問題,有需要的朋友可以參考一下2013-10-10