泛型程式設計
編寫與型別無關的邏輯**,是**復用的一種手段。模板是泛型程式設計的基礎模板
代表乙個函式家族,該函式與型別無關,在使用時被引數化,根據實參型別產生函式的特定型別版本(它本身不是類或函式)模板函式的格式
模板的例項化
產生模板特定型別的過程稱為函式模板的例項化
template
t add(t left,t right)
int main()
模板的實參推演從函式實參確定模板形參型別和值得過程稱為模板實參推斷型別形參轉換
一般不會轉換實參已匹配以有的例項化,相反會產生新的例項;模板形參編譯器只會執行兩種轉換:1.const轉換;2.陣列或函式到指標的轉換
typedef
double t;
//模板形參的名字在同一模板中只能使用一次
template
// error c2991: 重定義 模板 引數「t」
//所有模板形參前必須加上class/typename關鍵字修飾
template
//error c2061: 語法錯誤: 識別符號「u」
template
//可以指定預設的模板實參
t add(t left=1, t right=2 )//預設的呼叫引數
t val;//全域性變數
int main()
模板形參的名字只能在模板形參之後到模板宣告或定義的末尾使用
template
//n:非模板型別引數
void funtest(t(&_array)[n]) //陣列引用
}int main()
模板函式和同名非模板函式int max(const
int& a, const
int& b) //同名的非模板函式和模板函式可以同時存在
template
t max(const t& a,const t& b)
template
t1 max(const t1& a, const t2& b)
int main()
模板特化template
//模板例項
int compare(t a, t b)//比較了位址
template
<>//模板特化 在模板例項之後
//特化的宣告必須與特定的模板相匹配
//int compare(char* p1, char* p2)//error :不是函式模板的專用化
int compare
char*>(const
char* p1, const
char* p2)
int main()
模板過載template
t max(const t& a, const t& b)
template
t max(const t& a, const t& b, const t& c)//過載
int main()
C 模板之函式模板
c 中分為函式模板和類模板,它們之間的相同點是都含有模板型參表,不同點在模板例項化的時候函式模板可以不用顯示的宣告模板類項,編譯器會自動幫我們匹配,而類模板則需要顯示定義出來,例如 template compare type type compare a,b template class queue...
c 之模板函式 模板
模板就是建立通用的模具,大大提高復用性。c 的另一種程式設計思想是泛型程式設計,主要利用的就是模板。c 提供兩種模板機制 函式模板和類模板。宣告 template typename可以替換成class 函式模板 函式模板的作用 建立乙個通用函式,其函式返回值型別和形參型別可以不具體制定,用乙個虛擬的...
C 之函式模板
c 中有很多函式僅僅是引數型別不同,但是實現過程相似,可以寫乙個通用的函式,使用非例項化的引數型別,該引數在函式被呼叫時進行例項化,這種函式稱之為模板函式 普通函式 引數值未定,但引數型別已知 模板函式 引數值和引數型別均為未知 template t表示未確定的模板引數型別 void functio...