C 設計新思維的traits和policy

2022-02-19 16:50:49 字數 903 閱讀 1910

這篇部落格講得挺清楚的,本來想自己寫寫看總結下的,不過看了下這個文章已經寫得很清楚了,倒沒有必要了,總得來說,要了解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 著侯捷 於春景譯 華中科技大學出版社 這本書後面時間的緣故,已經沒有認真,因此本文章僅大致作為記錄,謝絕參考!評價 書的內在是一本好書,講了很多的設計策略和如何使用模板來進行設計。...