日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Effective C++ --7 模板与泛型编程

發布時間:2025/3/21 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Effective C++ --7 模板与泛型编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇Effective C++ -- 6 繼承與面向對象設計

?

41、了解隱式接口和編譯器多態

?1classtemplate都支持接口和多態。Class支持顯示接口,多態是指virtual引起的運行期多態;而template支持隱式接口和編譯器多態。

?2)編譯器多態是指以不同的template參數具現化function templates會導致調用不同的函數。隱式接口是指template中執行于類型對象身上的操作來決定的。

?3)顯示接口由函數的簽名式(函數名、參數類型、返回類型)構成,隱式接口不基于函數簽名式,而是由有效表達式組成。

42、了解typename的雙重含義

?1)聲明template參數時,classtypename可互換。

?2)使用typename關鍵字標識嵌套從屬類型名稱。Template內體現的名稱如果相依于某個template參數,稱之為從屬名稱,如果從屬名稱在class內呈嵌套狀,稱之為嵌套從屬名。但是不得在base class lists(基類列)或者member initialization list(成員初始列表)內以它作為base class修飾符。

43、學習處理模板化基類內的名稱

?1derived class template 往往拒絕調用base class template的函數,因為base class template有可能被特化,而那個特化版本可能不提供和一般性template相同的接口,因此它往往拒絕在templatized base class內尋找繼承而來的名稱。

?2)解決上述問題的方法:可在derived class template內通過“this->”指涉base class template內的成員名稱,或籍由一個明白寫出base class 資格修飾符完成(using聲明式或用base::明確指出調用函數位于base class中)。

44、將與參數無關的代碼抽離templates

?1template 生成多個class和函數,所以任何template代碼都不該與某個構成膨脹的template參數產生相依關系。

?2)因非類型模板參數而造成的代碼膨脹,往往可以消除,做法是以函數參數或者class成員變量代替template參數。

?3)因類型而造成的代碼膨脹,往往可以降低,做法是讓帶有完全相同二進制表述的具現類型共享實現碼。

45、運用成員函數模板接受所有兼容類型

?1)真實指針支持隱式轉換,derived指針可以隱式轉換為base指針,但是template不同,以帶有base-derived的關系的兩個類型分別具化某個template,產出來的兩個具現體并不帶有此種關系。

?2)使用member function templates(成員函數模板)生成“可接受所有兼容類型”的函數。

?3)如果聲明member template用于泛化copy構造或泛化assignment操作,還需要聲明正常的copy構造函數和copy assignment操作符。

46、需要類型轉換時請為模板定義非成員函數

?1template實參推導過程中從不將隱式類型轉換函數納入考慮,這樣的轉換在函數調用過程中確實被使用,但是能夠調用一個函數之前,首先必須知道這個函數存在,為了知道它,必須先為相關的function template推導出參數類型,然后才能將適當的函數具現化出來。然而template實參推導過程中并不考慮采納“通過構造函數而發生的”隱式類型轉換。

?2)當編寫一個class template,而它所提供之“與此template相關的”函數支持“所有參數之隱式類型轉換”時,將那些函數定義為“class template內部的friend函數”。原因:為了讓類型轉換可能發生于所有實參身上,需要non-member函數;為了令函數被自動具現化,需要將它聲明在class內部;在class內部聲明non-member函數的唯一方法是令它成為friend

47、請使用traits classes表現類型信息

?1traits classes 使得“類型相關信息”在編譯期可用,它們以templatetemplate特化完成。不要將能在編譯期進行的留到運行期,選擇重載而不是判斷語句。

?2)整合重載技術后,traits classes有可能在編譯器對類型執行if…else測試。

48、認識template元編程

?1template metaprogrammingTMP,模板元編程)是編寫template-based C++程序并執行于編譯器的過程。47trait解法就是TMP

?2TMP可將工作由運行期移往編譯器,因而得以實現早期錯誤偵測和更高的執行效率。TMP同時使程序有較小的可執行文件、較短的運行期、較少的內存需求。

?3TMP可被用來生產“基于政策選擇組合”的客戶制定代碼,也可用于避免生成對某些特殊類型并不適合的代碼。

總結

以上是生活随笔為你收集整理的Effective C++ --7 模板与泛型编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。