模板實參推斷

2021-08-22 05:09:29 字數 846 閱讀 2410

定義:從函式實參確定模板實參的型別和值的過程叫做模板實參推斷 《c++ primer 4th》

舉例 template//模板型別形參

int compare(const glorp& v1,const glorp& v2)//函式形參

模板實參推斷的規則:

1)如果某個函式的多個形參的型別是同乙個模板型別形參,推斷出來的函式的這些實參型別要完全匹配

以下呼叫**會導致如下錯誤:

error 1 error c2782: 'int compare(const glorp &,const glorp &)' : template parameter 'glorp' is ambiguous

short i=0;

int j=3;

compare(i,j);

2)如果模板函式的形參是非引用型別,忽略const

以下呼叫**正確:

template

void fobj(a a)

3)形參如果是const 引用或者指標,實參可以使非const引用或者指標,編譯器會自動轉換到const

4)非引用型別模板形參可以將陣列或函式型別的實參轉換成陣列指標或函式指標

5)引用型別模板形參不能將將陣列或函式型別的實參轉換成陣列指標或函式指標,引數推導將出錯

6)可以根據函式指標推斷模板實參

例如:template int compare (const t& ,const t&);

int (*pf1) (const int&,const int&)=compare;

7)模板實參推斷順序是從函式返回值開始,從左至右逐一推導

8)為防止推導失敗,可以在呼叫函式時顯式指定模板引數型別

002 模板實參推斷 過載與模板

一 模板函式顯示實參 情況1 template t1 sum t2 a,t3 b 分析 呼叫的時候就需要指定t1的型別,如 sum 1,2 於是sum函式的返回型別為float。情況2 template 糟糕的設計,使用者必須指定所有的三個模板引數 t3 sum t1 a,t2 b 分析 對於sum...

STL運用的C 技術(3) 模板實參推斷

stl是c 標準庫的重要組成部分之一,它不僅是乙個可復用的元件庫,更是乙個包含演算法與資料結構的軟體框架,同時也是c 泛型程式設計的很好例子。stl中運用了許多c 的高階技術。本文介紹模板實參推斷的運用。主要參考了 c primer 和 stl原始碼剖析 stl利用模板模板實現的,比如它的演算法都是...

STL運用的C 技術(3) 模板實參推斷

stl是c 標準庫的重要組成部分之一,它不僅是乙個可復用的元件庫,更是乙個包含演算法與資料結構的軟體框架,同時也是c 泛型程式設計的很好例子。stl中運用了許多c 的高階技術。本文介紹模板實參推斷的運用。主要參考了 c primer 和 stl原始碼剖析 stl利用模板模板實現的,比如它的演算法都是...