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