C++函數(shù)模板的使用詳解
函數(shù)模板可以適用泛型來(lái)定義函數(shù),其中泛型可以是(int, double, float)等替換。在函數(shù)重載過程中,通過將類型作為參數(shù)傳遞給模板,可使編譯器自動(dòng)產(chǎn)生該類型的函數(shù)。
工作原理:比如需要定義一個(gè)比大小的max函數(shù),有三種類型的數(shù)據(jù)(int,double,float),可能就需要編寫三個(gè)函數(shù),這樣既浪費(fèi)時(shí)間,且容易出錯(cuò)。如:
#include <iostream>
using namespace std;
int Max(int a, int b);
double Max(double x, double y);
float Max(float s, float t);
int main()
{
cout << Max(1, 2) << endl;
cout << Max(3.0, 4.0) << endl;
cout << Max(5.23, 5.24) << endl;
return 0;
}
int Max(int a, int b)
{
return a > b ? a : b;
}
double Max(double x, double y)
{
return x > y ? x : y;
}
float Max(float s, float t)
{
return s > t ? s : t;
}結(jié)果如下:

從上面就可以看出一個(gè)很簡(jiǎn)單的比較大小的函數(shù),居然寫的這么繁瑣,顯然增加了工作量,極大降低了工作效率,因此,函數(shù)模板的出現(xiàn)十分有效的解決了這個(gè)問題。函數(shù)模板允許以任意類型的方式定義函數(shù),有兩種形式例如:
形式1:
template <typename Anytype> //template是函數(shù)模板的關(guān)鍵字
void Swap(Anytype &a,Anytype &b)
{
Anytype temp;
temp=a;
a=b;
b=temp;
}形式2:
template <class Anytype> //class是函數(shù)模板的關(guān)鍵字
void Swap(Anytype &a,Anytype &b)
{
Anytype temp;
temp=a;
a=b;
b=temp;
}使用函數(shù)模板之后的代碼如下:
形式1 :
#include <iostream>
using namespace std;
template <typename T>
T Max(T a, T b);
/* double Max(double x, double y);
float Max(float s, float t); */
int main()
{
cout << Max(1, 2) << endl;
cout << Max(3.0, 4.0) << endl;
cout << Max(5.23, 5.24) << endl;
return 0;
}
template <typename T>
T Max(T a, T b)
{
return a > b ? a : b;
}形式2:
#include <iostream>
using namespace std;
template <class T>
T Max(T a, T b);
int main()
{
cout << Max(1, 2) << endl;
cout << Max(3.0, 4.0) << endl;
cout << Max(5.23, 5.24) << endl;
return 0;
}
template <class T>
T Max(T a, T b)
{
return a > b ? a : b;
}結(jié)果如下:

對(duì)比之下,明顯精簡(jiǎn)了很多。
到此這篇關(guān)于C++函數(shù)模板的使用詳解的文章就介紹到這了,更多相關(guān)C++函數(shù)模板內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vs2022環(huán)境下安裝低版本.net framework的實(shí)現(xiàn)步驟
本文主要介紹了Vs2022環(huán)境下安裝低版本.net framework的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
詳解C/C++內(nèi)存區(qū)域劃分(簡(jiǎn)而易懂)
C/C++中,內(nèi)存主要分為、堆、棧、全局/靜態(tài)存儲(chǔ)區(qū)和常量存儲(chǔ)區(qū)。本文重點(diǎn)給大家介紹C/C++內(nèi)存區(qū)域劃分的相關(guān)知識(shí),需要的朋友參考下吧2021-06-06
C語(yǔ)言冒泡排序法的實(shí)現(xiàn)(升序排序法)
這篇文章主要介紹了C語(yǔ)言冒泡排序法的實(shí)現(xiàn)(升序排序法),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
C++異常處理 try,catch,throw,finally的用法
這篇文章主要介紹了C++異常處理 try,catch,throw,finally的用法,需要的朋友可以參考下2018-01-01
C++如何將一個(gè)vector內(nèi)容賦值給另一個(gè)vector,及swap與assign區(qū)別
在本文中,我們將主要介紹5種將一個(gè)vector內(nèi)容賦值給另一個(gè)vector的方式,順便討論下swap與assign的區(qū)別,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Matlab實(shí)現(xiàn)統(tǒng)計(jì)集合中各元素出現(xiàn)次數(shù)的示例代碼
統(tǒng)計(jì)數(shù)組中各個(gè)元素?cái)?shù)量是一個(gè)很常用的功能,本文主要為大家介紹了如何利用Matlab優(yōu)雅的統(tǒng)計(jì)集合中各元素出現(xiàn)的次數(shù),感興趣的可以了解一下2022-05-05

