Effective C++ 學(xué)習(xí)備忘錄七

模型與泛型編程

  • 條款 41 - 了解隱式接口和編譯期多態(tài)
  • classes 和 templates 都支持 Interfaces 和多態(tài)。
  • 對 classes 而言接口是顯式的,以函數(shù)簽名為中心,多態(tài)則是通過 virtual 函數(shù)發(fā)生于運(yùn)行期。
  • 對 template 參數(shù)而言接口是隱式的,奠基于有效表達(dá)式。多態(tài)則是通過 template 具現(xiàn)化和函數(shù)重載解析發(fā)生于編譯期。
  • 條款 42 - 了解 typename 的雙重意義
  • 聲明 template 參數(shù)時,前綴關(guān)鍵字 class 和 typename 可互換
  • 請使用關(guān)鍵字 typename 標(biāo)識嵌套從屬類型名稱,但不得在基類列和成員初始列以它作為 base class 修飾符。
  • 條款 43 - 學(xué)習(xí)處理模板化基類內(nèi)的名稱
  • 可在 derived class templates 通過 this-> 指涉 base class templates 內(nèi)的成員名稱,或借由一個明白寫出的 base class 修飾符完成。
  • 條款 44 - 將與參數(shù)無關(guān)的代碼抽離 templates
  • Templates 生成多個 classes 和多個函數(shù),所以任何 Template 代碼都不該與某個造成膨脹的 Template 參數(shù)產(chǎn)生相依關(guān)系。
  • 因非類型模板參數(shù)而造成的代碼膨脹,往往可以消除,做法是以函數(shù)參數(shù)或者 class 成員變量替換 template 參數(shù)。
  • 因類型參數(shù)而造成的代碼膨脹,往往可降低,做法是讓帶有完全相同二進(jìn)制表述的具現(xiàn)類型共享實(shí)現(xiàn)代碼。
  • 條款 45 - 運(yùn)用成員函數(shù)模板接受所有兼容類型
  • 請使用成員函數(shù)模板生成可接受所有兼容類型的函數(shù)
  • 如果你聲明 member templates 用于 “泛化 copy 構(gòu)造” 或者 “泛化 assignment 操作” ,你還是需要聲明正常的的 copy 構(gòu)造 和 copy assignment 操作。
  • 條款 46 - 需要類型轉(zhuǎn)換時請為模板定義非成員函數(shù)
  • 當(dāng)我們編寫一個 class template , 而它所提供之 “與此 template 相關(guān)” 的函數(shù)支持 “所有參數(shù)之隱式類型轉(zhuǎn)換”時,請將那些函數(shù)定義為 “class template 內(nèi)部的 friend 函數(shù)”
  • 條款 47 - 請使用 traits classes 表現(xiàn)類型信息
  • Traits class 使得類型相關(guān)信息在編譯期可用,它們使用 template 和 template 特化實(shí)現(xiàn)。
  • 整合重載技術(shù)后,Traits classes 有可能在編譯期對類型進(jìn)行 if...else 測試。
  • 條款 48 - 認(rèn)識 template 元編程
  • TMP,模板元編程可將工作由運(yùn)行期移往編譯期,因而得以實(shí)現(xiàn)早期錯誤偵測和更高的執(zhí)行效率。
  • TMP 可被用于生成 “基于政策選擇組合” 的客戶定制代碼,也可用來定制生成對某些特殊類型不合適的代碼
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容