C++函數模板的使用詳解

函數模板可以適用泛型來定義函數,其中泛型可以是(int, double, float)等替換。在函數重載過程中,通過將類型作為參數傳遞給模板,可使編譯器自動產生該類型的函數。

工作原理:比如需要定義一個比大小的max函數,有三種類型的數據(int,double,float),可能就需要編寫三個函數,這樣既浪費時間,且容易出錯。如:

#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;
}

 結果如下:

 從上面就可以看出一個很簡單的比較大小的函數,居然寫的這麼繁瑣,顯然增加瞭工作量,極大降低瞭工作效率,因此,函數模板的出現十分有效的解決瞭這個問題。函數模板允許以任意類型的方式定義函數,有兩種形式例如:

形式1:

template <typename Anytype> //template是函數模板的關鍵字
void Swap(Anytype &a,Anytype &b)
{
    Anytype temp;
    temp=a;
    a=b;
    b=temp;
}

形式2:

template <class Anytype> //class是函數模板的關鍵字
void Swap(Anytype &a,Anytype &b)
{
    Anytype temp;
    temp=a;
    a=b;
    b=temp;
}

 使用函數模板之後的代碼如下:

形式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;
}

結果如下:

對比之下,明顯精簡瞭很多。

到此這篇關於C++函數模板的使用詳解的文章就介紹到這瞭,更多相關C++函數模板內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: