程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第16章 模板與泛型編程(5)

第16章 模板與泛型編程(5)

編輯:C++入門知識

16.2 實例化

模板是一個藍圖,它本身不是類或函數。編譯器用模板產生指定的類或函數的特定類型版本。產生模板的特定類型實例的過程稱為實例化。

模板在使用時將進行實例化,類模板在引用實際模板類類型時實例化,函數模板在調用它或用它對函數指針進行初始化或賦值時實例化。

1. 類的實例化

類模板的每次實例化都會產生一個獨立的類類型。為int類型實例化的Queue與任意其他Queue類型沒有關系,對其他Queue類型的成員也沒有特殊的訪問權。

2. 類模板形參是必需的

類模板不定義類型,只有特定的實例才定義了類型。特定的實例化時通過提供模板實參與每個模板形參匹配而定義的。模板實參在用逗號分隔並用尖括號括住的形參表中指定。

Queue<int> qi; 
Queue<string> qs; 
 Queue<int> qi;
 Queue<string> qs;3. 函數模板實例化

使用函數模板時,編譯器通常會為我們推斷模板實參。

16.2.1 模板實參推斷

從函數實參確定模板實參的類型和值的過程叫做模板實參推斷(template argument deduction)。

1. 多個類型形參的實參必須完全匹配

2. 類型形參的實參的受限轉換

編譯器只會執行兩種轉換:

const轉換:接受const引用或const指針的函數可以分別用非const對象的引用或指針來調用,無需產生新的實例化。如果函數接受非引用類型,形參類型和實參都忽略const。

數組或函數到指針的轉換:如果模板形參不是引用類型,則對數組或函數類型的實參應用常規指針轉換。數組實參將當作指向其第一個元素的指針,函數實參當作指向函數類型的指針。

3. 應用於非模板實參的常規轉換

類型轉換的限制只適用於類型為模板形參的那些實參。

4.模板實參推斷與函數指針

可以使用函數模板對函數指針進行初始化或賦值,這樣做的時候,編譯器使用指針的類型實例化具有適當模板實參的模板版本。

16.2.2 函數模板的顯式實參

1.指定顯式模板實參

2. 在返回類型中使用類型形參

3. 顯式實參與函數模板的指針

 摘自 xufei96的專欄
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved