Posted on 2007-08-30 10:47
寶杉 閱讀(238)
評論(0) 編輯 收藏 引用 所屬分類:
C++
模板是重用機(jī)制的一種工具,可以實(shí)現(xiàn)類型參數(shù)化,即把類型定義為參數(shù),實(shí)現(xiàn)代碼可重用性。
F:宏定義也可以實(shí)現(xiàn)重用,為什么不使用宏?
Q:宏避開C++類型檢查機(jī)制,兩個不同類型參數(shù)之間的比較將會導(dǎo)致錯誤。
模板,模板函數(shù),模板類和對象之間的關(guān)系。
箭頭代表實(shí)例化

例如:
C++exams\template_max
模板形參將T實(shí)例化的參數(shù)。
函數(shù)模板是一個不完全的函數(shù),首先需要將模板形參T實(shí)例化為確定的類型。這個類型可以是預(yù)定義的,也可以是用戶自定義。
模板函數(shù)的異常
1 先調(diào)用順序遵循什么約定?
(1)尋找類型完全匹配的函數(shù)。
(2)尋找函數(shù)模板,實(shí)例化后,產(chǎn)生匹配的模板函數(shù)。
(3)若(1)(2)失敗,嘗試低一級的對函數(shù)重載的方法。例如,通過類型轉(zhuǎn)換。
(4)(1)(2)(3)都為匹配,則是一個錯誤。
2 先了解了這樣的約定,就很容易理解以下:
用非模板函數(shù)重載函數(shù)模板,只聲明非模板類函數(shù)的原型,不給出函數(shù)體,而函數(shù)體借用函數(shù)模板的函數(shù)體。
例如:
template <class T>
T max( T x, T y)
{
return( x > y )? x : y;
}
int max( int, int);
//int max 重載了函數(shù)模板的函數(shù)體;
int i;
char c;
max(i, c);
3 定義一個完整的有函數(shù)體的非模板函數(shù)。
比如:max(char, char)時,上面的函數(shù)模板不能比較比一個字符更長的字符串了。
所以,像一般的重載函數(shù)一樣定義。
char *max( char *x, char *y )
{
return ( strcmp(x, y) > 0 ) ? x :y;
}
char * max重載了函數(shù)模板,當(dāng)調(diào)用為:
max ( “abcd”, “efgh” ); 將執(zhí)行此函數(shù)。