一、類模板的深入學(xué)習(xí):
1、類模板可以定義任意多個(gè)不同的類型參數(shù)(這一點(diǎn)和模板函數(shù)一樣)
template < typename T1, typenaem T2 >
class Test
{
public:
void add(T1 a, T2 b);
}
//定義類對(duì)象時(shí)
Test
2、類模板可以被特化
指定類模板的特定實(shí)現(xiàn)
部分類參數(shù)必須顯示指定
根據(jù)類型參數(shù)分開(kāi)實(shí)現(xiàn)類模板
特化前:
template < typename T1, typename T2 >
class Test
{
};
特化后:
template < typename T >
class Test < T , T >
{
};
3、類模板的特化類型:
部分特化:用特定的規(guī)則約束類型參數(shù)
完全特化:完全顯示指定類型參數(shù)
完全特化前:
template
完全特化后:
template < >
class Test < int, int>
{
};
代碼實(shí)踐:
#include
輸出結(jié)果:
root@txp-virtual-machine:/home/txp# ./a.out
void add(T1 a, T2 b)
3.5
void add(T a, T b)
10
class Test < T , T >
void add(void* a, void* b)
error to add void* parm
void add(T1* a, T2* b)
1.1
4、類模板特化注意事項(xiàng):
(1)特化只是模板的分開(kāi)實(shí)現(xiàn)
本質(zhì)上是同一個(gè)類模板
(2)特化類模板的使用方式是統(tǒng)一的
必須顯示指定每一個(gè)類型參數(shù)
5、類模板特化與重定義有區(qū)別嗎?函數(shù)模板可以特化嗎?
(1)重定義和特化的不同:
重定義:
--一個(gè)類模板和一個(gè)新類(或者兩個(gè)類模板)
--使用的時(shí)候需要考慮如何選擇的問(wèn)題
特化:
--以統(tǒng)一的方式類使用類模板的特化類
--編譯器自動(dòng)優(yōu)先選擇特化類
(2)函數(shù)模板只支持參數(shù)完全特化
函數(shù)模板特化前:
template < typename T >
bool Equal(T a, T b)
{
return a==b;
}
函數(shù)模板完全特化后:
template < >
bool Euqal
代碼實(shí)踐:
#include
輸出結(jié)果:
root@txp-virtual-machine:/home/txp# ./a.out
bool Equal(T a, T b)
1
bool Equal
注解:當(dāng)需要重載函數(shù)模板時(shí),優(yōu)先考慮使用模板特化;當(dāng)模板特化無(wú)法滿足需求,再使用函數(shù)重載
二、總結(jié):
類模板可以定義任意多個(gè)不同的類型參數(shù)
類模板可以被部分特化和完全特化
特化的本質(zhì)是模板的分開(kāi)實(shí)現(xiàn)
函數(shù)模板只支持完全特化
工程中使用模板特化代替類(函數(shù))重定義
好了,今天的分享就到這里,如果文章中有錯(cuò)誤或者不理解的地方,可以交流互動(dòng),一起進(jìn)步。我是txp,下期見(jiàn)!
-
可編程邏輯
+關(guān)注
關(guān)注
7文章
526瀏覽量
44768 -
C++
+關(guān)注
關(guān)注
22文章
2119瀏覽量
75330
發(fā)布評(píng)論請(qǐng)先 登錄
基于LockAI視覺(jué)識(shí)別模塊:C++多模板匹配
基于LockAI視覺(jué)識(shí)別模塊:C++多模板匹配

基于LockAI視覺(jué)識(shí)別模塊:C++模板匹配
基于LockAI視覺(jué)識(shí)別模塊:C++模板匹配

C++學(xué)到什么程度可以找工作?
限時(shí)免積分下載:增量式與位置式PID算法的C語(yǔ)言實(shí)現(xiàn)分享
Spire.XLS for C++組件說(shuō)明

同樣是函數(shù),在C和C++中有什么區(qū)別
ADS1299EEGFE-PDK在window上如何通過(guò)C++讀取8通道數(shù)據(jù)?
C7000 C/C++優(yōu)化指南用戶手冊(cè)

TMS320C6000優(yōu)化C/C++編譯器v8.3.x

C語(yǔ)言和C++中結(jié)構(gòu)體的區(qū)別
C7000優(yōu)化C/C++編譯器

評(píng)論