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