template之函式模版

2021-09-03 02:14:09 字數 968 閱讀 7140

函式模板//通用函式適用於不同資料型別

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