函式模板作用:
建立乙個通用函式,其函式返回值型別和形參型別可以不具體制定,用乙個虛擬的型別來代表。
語法:
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 所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表。這個通用函式就稱為函式模板。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會根據實參的型別...