簡單模板:
template< typename t > t function( t a, t b)
類模板:
template struct object;
函式模板
template< class t> inline t function( t a, t b)
不可以使用不同型別的引數來呼叫函式模板
可以使用class代替typename. 但不能使用struct代替typename
使用具體型別代替模板引數t叫例項化, 從而產生乙個模板例項.
模板編譯過程:
實際編譯兩次
1,沒有例項化前,檢查模板**本身檢查是否有語法錯誤
2,例項化期間,檢查模板**的呼叫是否合法
模板編譯
1,型別必須嚴格符合,不可自動型別轉換.
2,如果真的要轉換,那麼需要使用static_cast< …>進行強制轉換.
函式模板過載
1, 模板函式可以像普通函式一樣被過載
2, 非模板函式可以和同名模板函式共存
3, 編譯器通過函式模板引數推導來決定使用哪個過載
其他因素相同的情況下,過載裁決過程呼叫非模板函式.
(否則編譯器還需要自己在例項化一套**)
max<>(7,32) 呼叫max允許空模板引數
max(2,3) 顯式指定模板實參型別
template < typename t, size_t n = 1024> class stack;
a,關鍵字 typename 和class 都可使用
b,在模板內, t可以像int,char一樣 定義成員變數和成員函式
c,除了copy constructor之外, 如果在類模板內需要使用到這個類本身,如定義operator=,那麼應該使用其完整定義(stack)
stack& operator=( stack < t,n> const & );
類模板的使用:
1,stack s;
2,stack< int,100> s;
1,stack< stack > s; 定義乙個stack的stack , 此處必須有乙個空格, 否則編譯器會以為是》操作符
template<>
class stack;
可能可以做些特別的優化或者提供不同的實現
避免在例項化某些類時,引起一些可能產生的詭異行為
主模板:
template< typename t1, typename t2> class myclass;
偏特化:
2 template< typename t> class myclass< t,t>;
3 template< typename t> class myclass< t,int>;
4 template< typename t1, typename t2> class myclass< t1*,t2*>;
如果有不止乙個偏特化同程度的能匹配某個呼叫,那麼該呼叫具有二義性,error.
如 :
myclass< int, int> obj; 滿足 myclass< t,t> 和 myclass< t,int>
myclass< int*, int*> obj; 滿足 myclass< t1*,t2* > 和 myclass< t,t>
template< typename t, typename tcons = std::vetor< t> > class stack;
除了 operator= ,其他操作符都可以被過載.
traits可以實現為模板類, 而關聯則是針對每個具體型別t的特化.
traits實現: (函式定義)
template
< typename t>
typename simg< t >::returntype sigma ( const t const* start, const t const* end)
用於分離演算法和容器
智慧型指標
Boolan STL與泛型程式設計 第一周筆記
泛型程式設計 一 我們的目標 level 0 使用c 標準庫 level1 認識c 標準庫 胸中自由丘壑 level2 良好使用c 標準庫 level3 擴充c 標準庫 c standard library vs.standard template library stl 前者包含後者 c 標準庫的...
Boolan STL 第一周筆記
容器是用來儲存資料的,資料可以試使用者自定義的類,也可以試預定義的型別。c 中的容器主要使用有array vector list set map等。stl中的容器裡都有分配器,在宣告乙個容器的模板第二個引數就是分配器。分配器是用來給容器分配記憶體的,在一般情況下,使用預設的分配器即可。在stl中要實...
極客班STL與泛型程式設計 第一周學習筆記
續前節template簡單分類 模板是指允許函式或類 物件 通過泛型的形式進行表現或執行。對應不同的型別 types 都可以正常工作,而無需每個型別一套程式。例項化分為顯式例項化和隱式例項化,顯示例項化是指在 中明確指明使用哪種型別進行例項化,例如前節中complexc1 1.1,2.2 隱式例項化...