這篇部落格講得挺清楚的,本來想自己寫寫看總結下的,不過看了下這個文章已經寫得很清楚了,倒沒有必要了,總得來說,要了解traits和policy,需要了解下面這三個點
1.什麼是特化,什麼是偏特化
顧名思義,特化就是針對一些特殊的型別進行變化,畢竟c++的模板是什麼型別都能放進去的,但是有些型別就是比較獨特,需要做特別的處理,這個就有了特化和偏特化,在這篇部落格中作者特化了accumulationtraits的int和char
2.利用typedef來抽象資料型別
當要把兩個類中的不同的型別統一成一種型別要怎麼辦,就是typedef,在這篇部落格中,作者講int和chat全部typedef了acct,當然,所謂的typedef就是取個別名
3.typename除了定義模板型別,還能做什麼用??
在我們編寫模板**的時候,我們經常會這樣
template
於是大部分人就認為typename的作用只是告訴編譯器這個是模板的型別而已,其實typename還有乙個隱藏功能,就是告訴編譯器這個是乙個type的name,而不是乙個靜態變數,想想看,我們在訪問乙個類的靜態變數的時候,語法是這樣的:
class_name::value_name;那麼,如果我們的value_name是乙個通過typedef定義的名稱呢??編譯器怎麼知道??
這個時候就需要typename來告訴編譯器了,typename class_name::value_name,這樣編譯器就會知道這個value_name是乙個type的name,而不是乙個static type了
不管是traits還是policy的模式,都是通過規定乙個統一的介面或者型別來讓乙個函式或者類呼叫,當然所謂的統一跟純虛函式一樣都是通過名稱來限制使用者的行為,起碼你需要寫出這幾個介面,不然編譯就無法通過,不同的是,虛函式無法統一資料型別,而且虛函式是執行時確定的,而模板則是在編譯時確定的
C 設計新思維(1)
本文所有的例證 在reactos 0.3.14 include c stlport type traits有所展示,這是reactos專案中的stl庫檔案 編譯期assertion template to safe reinterpret cast from from 要保證轉型時安全的,那麼必須保...
C 設計新思維 pdf格式
侯捷 於春景 合譯 c 設計新思維泛型程式設計與設計正規化 之 應用 前三章內容簡介如下 第 篇 技術 techniques 1 第1章以policy為基礎的class設計 policy based class design 3 1.1 軟體設計的多樣性 multiplicity 3 1.2 全功能...
《C 設計新思維》評價和勘誤及問題
c 設計新思維 評價和勘誤及問題 advanced c design 的中譯本 andrei alexandrescu 著侯捷 於春景譯 華中科技大學出版社 這本書後面時間的緣故,已經沒有認真,因此本文章僅大致作為記錄,謝絕參考!評價 書的內在是一本好書,講了很多的設計策略和如何使用模板來進行設計。...