函式模板//通用函式適用於不同資料型別
(1)所有函式模板的定義都是用關鍵字template開始的,該關鍵字之後是使用尖括號括起來的模板參數列。
下面以絕對值函式模板為例:
在編譯過程中,有實參的型別來決定模板引數的型別。
在函式模板例項化的過程中,不能完成型別轉換。
比如:template
void fun1(t x,t y)
此時 fun1(『a』,『b』)與fun1(1,2)都是可行的,但是對於這種呼叫fun1(『a』,1)是不能執行的,因為在模板參數列中,兩個引數的型別是相同的,而函式模板中的引數列表不能完成型別轉換。
(2)函式模板之間及函式模板與特定函式之間都可以過載。至於哪乙個會被呼叫,關鍵看那種更精確。
函式模板的過載可以通過模板參數列中引數個數的不同來控制。
下面舉乙個特定函式與函式模板過載的例子:
template//宣告乙個函式模板
void swap(t &x,t &y)
void swap(int &x,int &y)//過載swap,定義乙個特定函式
int a=1,b=2;double c=1.1,d=1.2;char e=『a』,f=『a』;
swap(a,b)//呼叫特定函式,因為更簡便
swap(c,d);swap(e,f)//呼叫模板,因為呼叫特定函式時需要隱式轉換,教麻煩。
swap(a,e)//呼叫特定函式,e會轉換為int型。
關於呼叫原則總結下:
1如果某一普通函式的形參正好與函式呼叫的形參型別匹配,則優先呼叫該函式。
2如果不存在1中的函式,而從同名的類屬函式例項化乙個函式,且型別匹配,則呼叫。
3如果存在形參不匹配的特定函式與不能例項化的模板,則呼叫特定函式,並進行隱式轉換。
C 之函式模版
函式模版是通用的函式描述,有時候也被稱為引數化型別。建立模版如下 template void swap any a,any b template void swap job job1,job job2 void show job j int main template void swap job j...
template函式模板
模板 templates 使得我們可以生成通用的函式,這些函式能夠接受任意資料型別的引數,可返回任意型別的值,而不需要對所有可能的資料型別進行函式過載。這在一定程度上實現了巨集 macro 的作用。它們的原型定義可以是下面兩種中的任何乙個 template function declaration ...
template函式模板
模板 templates 使得我們可以生成通用的函式,這些函式能夠接受任意資料型別的引數,可返回任意型別的值,而不需要對所有可能的資料型別進行函式過載。這在一定程度上實現了巨集 macro 的作用。它們的原型定義可以是下面兩種中的任何乙個 template function declaration ...