C 模板之函式模板

2021-07-28 22:00:16 字數 2034 閱讀 3127

泛型程式設計

編寫與型別無關的邏輯**,是**復用的一種手段。模板是泛型程式設計的基礎

模板
代表乙個函式家族,該函式與型別無關,在使用時被引數化,根據實參型別產生函式的特定型別版本(它本身不是類或函式)

模板函式的格式

模板的例項化

產生模板特定型別的過程稱為函式模板的例項化

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...