C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板成员函数的实例化
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板成员函数的实例化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 默認情況下,一個類模板的成員函數只有當程序用到它時才進行實例化。
(即使某種類型不能完全符合模板操作的要求(參見9.2節,第294頁),我們仍然能用該類型實例化類todo)。
eg.
//實例化Blob<int>和接受initializer_ list<int>的構造函數 Blob<int> squares = {0,1,2,3,4,5,6,7,8,9};//實例化Blob<int>: :size() const for (size_ t i = 0; i != squares.size() ; ++i)squares[i] = i*i; //實例化B1ob<int>: :operator[] (size_ t)1.1 在類代碼內簡化模板類名的使用
一個類模板類型必須提供模板實參,在類模板自己的作用域中,我們可以直接使用模板名而不提供實參
//若試圖訪問一個不存在的元素,BlobPtr拋出一個異常 template <typename T> class BlobPtr { public:BlobPtr() : curr(0) { }BlobPtr (Blob<T> &a, size_ t sz = 0) : wptr (a.data),curr (sz) { }T& operator* () const{auto P = check (curr, "dereference past end") ;return (*p) [curr]; // (*p) 為本對象指向的vector} //遞增和遞減 BlobPtr& operator++(); //前置運算符 BlobPtr& operator--() ; private://若檢查成功,check返回一個指向vector的shared_ ptr std: :shared ptr<std: :vector<T>>check(std: :size_ t, const std: :string&) const;//保存一個weak_ ptr,表示底層vector可能被銷毀 std: :weak_ ptr<std: :vector<T>> wptr; std: :size_ t curr; //數組中的當前位置 }; 遞增和遞減實際上是 BlobPtr<T>& operator++ () ; B1obPtr<T>& operator--() ;1.2 在類模板外使用類模板名
當我們在類模板外定義其成員時,直到遇到類名才表示進入類的作用域
//后置:遞增/遞減對象但返回原值 template <typename T> BlobPtr<T> BlobPtr<T>: :operator++ (int) {//此處無須檢查;調用前置遞增時會進行檢查BlobPtr ret = *this; //既是 BlobPtr<T>ret = *this;++*this;//推進一個元素;前置++檢查遞增是否合法return ret; // 返回保存的狀態 }1.3 在模板作用域中引用模板類型
一個類模板中的代碼如果使用了另外一個模板,通常不將一一個實際類型(或值)的名字用作其模板實參。相反的,我們通常將模板自己的參數當作被使用模板的實參。
eg,我們的data成員使用了兩個模板,vector和shared_ ptr。 我們知道,無論何時使用模板都必須提供模板實參。
總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板成员函数的实例化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vmware 扩展Ubuntu虚拟机的磁
- 下一篇: C++ Primer 5th笔记(cha