函式模板
函式模板的目的:當函式的邏輯相同,但函式引數型別不同時,讓型別引數化。
#include using namespace std;
template //通知編譯器開始泛型程式設計
void tprint(t1 x, t2 str1) //兩個不同引數的情況
template void tswap(t &a, t &b) //兩個相同引數的情況
int main()
函式模板遇上函式過載
呼叫函式模板(本質:型別引數化)會對入口引數嚴格的按照型別匹配,不會進行自動型別轉換。
普通函式的呼叫:可以進行隱式的型別轉換。
呼叫規則研究:
(1) 函式模板可以像普通函式一樣被過載。
(2) c++編譯器優先考慮普通函式。
(3) 如果函式模板可以產生乙個更好的匹配,那麼選擇模板。
(4) 當函式模板和普通函式都符合呼叫時,優先選擇普通函式
#include using namespace std;
int max(int a, int b)
template t max(t a, t b)
template t max(t a, t b, t c)
int main()
函式模板原理
c語言編譯器gcc,c++語言編譯器g++。
編譯器並不是把函式模板處理成能處理任意類的函式,編譯器從函式模板通過具體型別產生不同的函式。編譯器會對函式模板進行兩次編譯:
(1) 在宣告的地方對模板**本身進行編譯
(2) 在呼叫的地方對引數替換後的**進行編譯
C 學習筆記 函式模板
函式模板 模板,template 定義乙個模子,自動適應各個型別。語法 template t t arr,int len 1 演算法相同 2 元素型別不同,用t代替。使用時,用 來具體指定typename的型別 int main 也就是說,在使用時函式名為 表示吧int型別帶入模板。1 使用函式模板...
C 函式模板和排序的函式模板 學習筆記
我們在使用過載函式時,只是使用了函式名,而函式體還是得分別定義,在c 中函式模板為我們很好的解決了這個問題.1.函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template ...
C 學習筆記24 函式模板
1 泛型程式設計的概念 不考慮具體資料型別的程式設計模式 對於swap函式可以考慮下面的泛型寫法 swap t a,t b t t a a b b t swap泛型寫法中的 tt 不是乙個具體的資料型別,而是泛指任意的資料型別。c 中泛型程式設計 函式模板 提供一種特殊的函式可用不同型別進行呼叫 看...