讀書筆記--模板與泛型編程

  • 了解隱式接口和編譯期多態
    •   編譯期多態和運行期多態
      •   運行期多態就好比是virtual函數再運行的時候才確定該virtual函數該被綁定為哪個函數,運行的時候才確定函數類型。
      •   編譯期多態就好比是泛型編程和模板編程中,在編譯的時候才確定哪個函數該被調用,根據函數的類型去確定。
    •   顯示接口和隱式接口
      •   顯示接口由函數的簽名式構成
        class widget{
        public:widget();virtual ~widget();virtual std::size_t size() const;virtual void normalize();void swap(widget& other);
        };
        //這個其中:上述的這些函數都構成了這個public的顯示接口
      • 隱式接口:由一組表達式組成;if (w.size()>10 && w!=somenastywidget)...

    •   classes和templates都支持接口和多態;對classes而言接口是顯示的,一以函數簽名為中心。多態是通過virtual函數發生在運行期;對template參數而言,接口是隱式的,基于有效表達式。多態則是通過template具現化和函數重載解析發生于編譯期。



  • typename的意義
    •   在template聲明式中,class和typename沒有什么不同。
      template <class T> class widget;
      template <typename T>class widget;
    •   從屬名稱和謂非從屬名稱
      •   從屬名稱(dependent typename):表示這個變量名稱是依賴于template參數的,有模板參數確定的。
        •   利用這個從屬名稱可能有時候會發生名稱晦澀難懂,或者是名稱過長導致名稱無法解析。這個時候我們可以使用typename關鍵字,可以讓編譯器知道某個長名稱是一個參數類型,這樣可以消除歧義。
        •   一般我們在template中指涉了一個從屬類型名稱,就要在它前面添加關鍵字typename。
        •   特殊:typename不可以出現在base classes list內的從屬類型名稱之前,也不可在member initialization list中作為base class修飾符。
      •   謂非從屬名稱(non-dependent typename):這個變量是不依賴與template參數的,是一個正常的變量名稱。

    •   typedef:作用是用一個簡短的名稱替換一個較長的名稱
      typedef typename std::iterator_traits<itrat>::value_type value_type;
      //在這里 typename是指定從屬名稱,typedef是讓這個長的從屬名稱變為短的value_type。





  • 學會處理模板化基類內的名稱
    •   可以在派生類模板中內通過this->指涉base class templates內的成員名稱,或者籍由一個明白寫出的base class資格修飾符完成




  • 將于參數無關的代碼抽離templates
    •   templates生成多個classes和多個函數,所以任何template代碼都不該與某個造成膨脹的template參數產生相依關系。
    •   因非類型末班參數而造成的代碼膨脹往往可以消除,做法是以函數參數或class成員變量替換template參數。
    •   因類型參數而造成的代碼膨脹往往可以降低,做法是讓帶有相同二進制表述的具現類型共享實現碼。




  • 運用成員函數模板接收所有兼容類型
    •   成員模板函數
      template <typename T>
      class smartptr{
      public:template<typename U>smartptr(const smartptr<U> &other);//成員模板函數
      };
    •   請使用成員模板函數生成可以收所有兼容類型的函數;如果你聲明成員模板函數用于泛化copy構造函數和泛化assignment操作,你還是需要聲明正常的copy構造函數和泛化assignment操作





?

轉載于:https://www.cnblogs.com/Kobe10/p/5744441.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395428.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395428.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395428.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

棧和遞歸的關系 144:Binary Tree Preorder Traversal

前序遍歷&#xff1a;根左右 //用棧來實現非遞歸解法/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vec…

運行級別

ls -l /usr/lib/system/runlevel*target &#xff08;查看運行級別&#xff09;Linux系統有7個運行級別(runlevel)運行級別0&#xff1a;系統停機狀態&#xff0c;系統默認運行級別不能設為0&#xff0c;否則不能正常啟動運行級別1&#xff1a;單用戶工作狀態&#xff0c;roo…

微信sdk swift版_使用Swift 4的iOS版Google Maps SDK終極指南

微信sdk swift版by Dejan Atanasov通過Dejan Atanasov 使用Swift 4的iOS版Google Maps SDK終極指南 (Your ultimate guide to the Google Maps SDK on iOS, using Swift 4) Many iOS apps use Google Maps. This is a very common feature, so I have decided to prepare an u…

精確覆蓋DLX算法模板

代碼 struct DLX {int n,id;int L[maxn],R[maxn],U[maxn],D[maxn];int C[maxn],S[maxn],loc[maxn][2];void init(int nn0) //傳列長{nnn;for(int i0;i<n;i) U[i]D[i]i,L[i]i-1,R[i]i1;L[0]n; R[n]0;idn;memset(S,0,sizeof(S));}void AddRow(int x,int col,int A[]) //傳入參…

android 代碼布局設置wrap_content,android ScrollView布局(wrap_content,最大大小)

我最后編寫了自己的類,擴展了ScrollView既然你問……這是代碼.可能不是最干凈但它做我想要的.請注意,它期望在創建視圖時設置layout_weight,并且不應在父LinearLayout中設置weigthSum,否則你會得到有趣的東西(因為這個的權重從原始值變為0,具體取決于大小ScrollView的內容)首先…

ABAP數據類型

數據類型表&#xff1a; 類型縮寫 類型 默認長度 允許長度 初始值 描述 C 文本型 1 Space 字符串數據,如Program D 日期型 8 8 00000000 日期數據,格式為YYYYMMDD F 浮點型 8 8 0 浮點數 I 整型 4 10 0 帶正負符號的整數 N 數值型 1 31 00……

cocos2d-x C++ 原始工程引擎運行機制解析

新建一個工程&#xff0c;相信感興趣的同學都想知道cocos引擎都是如何運行的 想知道是如何運行的&#xff0c;看懂四個文件即可 話不多說&#xff0c;上代碼&#xff1a; 1、首先解釋 AppDelegate.h 1 #ifndef _APP_DELEGATE_H_2 #define _APP_DELEGATE_H_3 4 #include "…

web高德maker動畫_Web Maker —我如何構建一個快速的離線前端游樂場

web高德maker動畫by kushagra gour由kushagra gour Web Maker —我如何構建一個快速的離線前端游樂場 (Web Maker — How I built a fast, offline front-end playground) Web Maker is a Chrome extension that gives you a blazing fast and offline front-end playground —…

時間小知識對于時間轉換可能有幫助

那么UTC與世界各地的時間應如何換算呢?它是將全世界分為24個時區&#xff0c;地球的東、西經各180(共360)被24個時區平分&#xff0c;每個時區各占15。以經度0(即本初子午線)為基準&#xff0c;東經730′與西經730′之間的區域為零時區&#xff1b;東經和西經的730′與2230′之…

JS——實現短信驗證碼的倒計時功能(沒有驗證碼,只有倒計時)

1、功能描述 當用戶想要獲取驗證碼時&#xff0c;就點擊 免費獲取驗證碼 &#xff0c;然后開始倒計時&#xff0c;倒計時期間按鈕文字為剩余時間x秒&#xff0c;且不可按狀態&#xff0c;倒計時結束后&#xff0c;按鈕更改為點擊重新發送。 2、分析 必須用到定時器。按鈕點擊后…

華為OV小米鴻蒙,華為鴻蒙開源,小米OV們會采用嗎?

華為曾一直聲言不會進入電視市場,由此其他國產電視企業才會采用華為的可見企業是非常擔憂同業競爭關系的,而在智能手機市場,華為毫無疑問與其他國產手機企業都是競爭對手,更何況就在2019年下半年和2020年上半年華為在國內手機市場的份額超過四成直逼五成,其他國產手機企業被壓得…

第22天:如何使用OpenAI Gym和Universe構建AI游戲機器人

by Harini Janakiraman通過哈里尼賈納基拉曼 第22天&#xff1a;如何使用OpenAI Gym和Universe構建AI游戲機器人 (Day 22: How to build an AI Game Bot using OpenAI Gym and Universe) Let’s face it, AI is everywhere. A face-off battle is unfolding between Elon Musk…

軟件測試基礎理論(總結)

1&#xff0e; 軟件的三個要素&#xff1a;程序&#xff08;實行特定功能的代碼&#xff09; 文檔&#xff08;支持代碼運行&#xff09; 數據&#xff08;支持程序運行一切有關&#xff09; 2&#xff0e; 軟件的產品質量 指的是&#xff1f; 1&#xff09;質量是指實體特性…

android studio 7200u,#本站首曬# 多圖殺貓 華為MateBook X上手體驗

#本站首曬# 多圖殺貓 華為MateBook X上手體驗2017-06-09 18:45:4437點贊33收藏78評論前幾天華為開了個發布會&#xff0c;帶來了三款筆記本電腦&#xff0c;有幸在第一時間借到了MateBook X&#xff0c;現在就來來做一個簡單的上手&#xff0c;稍晚一些再跟大家詳細聊聊使用起來…

svn強制解鎖的幾種做法

標簽&#xff1a; svn強制解鎖2013-12-16 17:40 12953人閱讀 評論(0) 收藏 舉報分類&#xff1a;SoftwareProject&#xff08;23&#xff09; 版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 作者&#xff1a;朱金燦 來源&#xff1a;http://blog.…

數據結構和算法練習網站_視頻和練習介紹了10種常見數據結構

數據結構和算法練習網站“Bad programmers worry about the code. Good programmers worry about data structures and their relationships.” — Linus Torvalds, creator of Linux“糟糕的程序員擔心代碼。 好的程序員擔心數據結構及其關系。” — Linux的創建者Linus Torva…

突然討厭做前端,討厭代碼_有關互聯網用戶最討厭的廣告類型的新數據

突然討厭做前端,討厭代碼You know that feeling when you’re scrolling through a blog post and then — BAM! — one of those “Sign up for our newsletter” modals pops up?當您滾動瀏覽博客文章&#xff0c;然后-BAM時&#xff0c;您就會知道這種感覺。 -彈出“注冊我…

iOS設計模式-生成器

定義&#xff1a;將一個產品的內部表象與產品的生成過程分割開來&#xff0c;從而可以使一個建造過程生成具有不同的內部表象的產品對象。 類型&#xff1a;對象創建 類圖&#xff1a; #import <Foundation/Foundation.h> interface Character : NSObject property(nonat…

《Android 應用案例開發大全(第二版)》——導讀

本節書摘來自異步社區《Android 應用案例開發大全&#xff08;第二版&#xff09;》一書中的目錄 &#xff0c;作者 吳亞峰 , 于復興 , 杜化美&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 目 錄 第1章 初識廬山真面目——Android簡介 1.1 Android的誕生 1…

模塊--sys模塊

sys模塊是與python解釋器交互的一個接口 import sys sys.path #python解釋器找模塊的環境變量import sys print(sys.path)結果:[H:\\王文靜\\python\\4練習\\課堂練習, H:\\王文靜\\python, C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\pyth…