c 函式模板

2021-10-21 21:09:18 字數 2574 閱讀 2625

函式模板作用:

建立乙個通用函式,其函式返回值型別和形參型別可以不具體制定,用乙個虛擬的型別來代表。

語法:

template函式宣告或定義
解釋:

template --- 宣告建立模板

typename --- 表面其後面的符號是一種資料型別,可以用class代替

t --- 通用的資料型別,名稱可以替換,通常為大寫字母

#include using namespace std;

//利用模版提供通用的交換函式

templatevoid myswap(t& a, t&b)

void test01()

int main(void)

總結:

注意事項:

#include using namespace std;

//1 自動型別推導,必須推導出一致的資料型別t,才可以使用

template void myswap(t& a, t& b)

void test02()

// 2、模板必須要確定出t的資料型別,才可以使用

template void func()

void test002()

int main(void)

總結:

普通函式與函式模板區別:

#include using namespace std;

//普通函式和函式模版的區別

//1、普通函式呼叫可以發生隱式型別轉換

//2、函式模版 用自動型別推導,不可以發生隱式型別轉換

//3、函式模版 用顯示指定型別,可以發生隱式型別轉換

//普通函式

int myadd04(int a, int b)

//函式模版

templatet myadd004(t a, t b)

void test04()

int main4(void)

總結:建議使用顯示指定型別的方式,呼叫函式模板,因為可以自己確定通用型別t

呼叫規則如下:

如果函式模板和普通函式都可以實現,優先呼叫普通函式

可以通過空模板引數列表來強制呼叫函式模板

函式模板也可以發生過載

如果函式模板可以產生更好的匹配,優先呼叫函式模板

#include using namespace std;

//普通函式與函式模板的呼叫規則

//1. 如果函式模板和普通函式都可以實現,優先呼叫普通函式

//2. 可以通過空模板引數列表來強制呼叫函式模板

//3. 函式模板也可以發生過載

//4. 如果函式模板可以產生更好的匹配, 優先呼叫函式模板

void myprint(int a,int b)

template void myprint(t a, t b)

//3. 函式模板也可以發生過載

template void myprint(t a, t b,t c)

void test05()

int main(void)

總結:既然提供了函式模板,最好就不要提供普通函式,否則容易出現二義性

侷限性:

例如:

templatevoid f(t a, t b)

在上述**中提供的賦值操作,如果傳入的a和b是乙個陣列,就無法實現了

再例如:

templatevoid f(t a, t b)

}

在上述**中,如果t的資料型別傳入的是像person這樣的自定義資料型別,也無法正常執行

因此c++為了解決這種問題,提供模板的過載,可以為這些特定的型別提供具體化的模板

#include #include using namespace std;

//自定義資料型別

class person

string m_name;

int m_age;

};//對比兩個資料是否相等

template bool mycompare(t& a, t& b)

return false;

}void test06()

else

}//利用具體化person的版本實現**,具體化優先呼叫

template<> bool mycompare(person& p1, person& p2)

return false;

}//自定義資料型別的比較

void test006()

else }

int main(void)

總結:

c 函式模板

include using namespace std template t max t a,t b,t c int main int main int i1 185,i2 76,i3 567,i double d1 56.63,d2 90.23,d3 3214.78,d long g1 67854...

c 函式模板

關鍵字template總是放在模板的電腦關於與宣告的最前面,關鍵字後面是用逗號分隔的模板參數列,該列表是模板參數列,不能為空。模板引數可以是乙個模板型別引數,它代表了一種型別 也可以是乙個模板非型別引數,它代表了乙個常量表示式。模板型別引數由關鍵字class或typename後加乙個識別符號構成。在...

C 函式模板

c 提供了函式模板 function template 所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表。這個通用函式就稱為函式模板。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會根據實參的型別...