如何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++ 學(xué)習(xí)之旅 Windows程序內(nèi)部運(yùn)行原理
學(xué)習(xí)C++與.net不同的是,一定要搞清楚Windows程序內(nèi)部運(yùn)行原理,因?yàn)樗婕按蠖鄶?shù)是操作系統(tǒng)的調(diào)用,而.net畢竟是在.netFrameWork上唱戲2012-11-11
C++實(shí)現(xiàn)坦克大戰(zhàn)小游戲EGE圖形界面
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)坦克大戰(zhàn)小游戲EGE圖形界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
OpenCV實(shí)現(xiàn)二值圖像的邊緣光滑處理
這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)二值圖像的邊緣光滑處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
解決了個(gè)困擾了2天的問題,定點(diǎn)運(yùn)算問題
本文主要講解定點(diǎn)運(yùn)算問題,需要的朋友可以參考一下。2016-06-06
C語言數(shù)據(jù)結(jié)構(gòu)之隊(duì)列算法詳解
這篇文章介紹了C語言數(shù)據(jù)結(jié)構(gòu)之隊(duì)列的算法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12

