template,模板函數的含義和用法

c++集合了過程式語言,通用語言,面嚮對象語言的衆多特點。模板是通用語言的特性,模板又叫參數化類型(parametrized types)。

模板的定義。以下是模板定義的一般格式:

template <class any>//class 也可以換成typename,後者是新來的。
  void swap(any &a,any &b)
  {
  ......
  }

利用模板機制可以顯著減少冗餘信息,能大幅度地節約程序代碼,進一步提高面向對象程序的可重用性和維護性。
在使用過程中,注意的問題:
(1)在template語句與函數模板定義語句之間不允許有別的語句。

template<class T>
int i; // 錯誤,不允許插入別的語句
T max(T x,T y)

(2)模板函數類似於重載函數,只不過它更嚴格一些。函數被重載的時候,在每個函數體內可以執行不同的動作。但同一個函數模板實例化後的所有模板函數都必須執行相同的動作。例如,下面重載函數就不能用模板函數代替,因爲它們所執行的動作是不同的。

void outdate(int i)
{ cout<<i; }
void outdata(double d)
{ cout<<"d="<<d<<endl; }

(3)在函數模板中允許使用多個類型參數。但是應當注意template定義部分的每個類型參數前必須有關鍵字class(typename)。

#inculde<iostream.h>
template<typename type1,typename type2>
void myfunc(type1 x,type2 y)
{ cout<<x<<' '<<y<<endl; }
main()
{
myfunc(10,"hao");
myfunc(0.123,10L);
return 0;
}

(4)函數模板的異常處理。函數模板有一個特點,雖然函數模板中德類型參數T可以實例化爲各種類型,但是採用類型參數T的每個參數必須實例化成完全相同的類型。模板類型不具有隱式的類型轉換。如果不注意這一點,可能產生錯誤。

template<class T>
T max(T x,T y)
{ return (x>y)?x:y; }
void fun(int i,char c)
{
max(i,i); // 正確,調用max(int,int)

 

發佈了50 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章