7 模板與泛型程式設計

2021-07-10 11:10:17 字數 1486 閱讀 6369

understanding implicit inte***ces and compile-time polymorphism.

編譯期多型:模板根據型別例項化;過載函式。

執行期多型:執行時決定那個乙個virtual函式被呼叫。

understand the two meanings of typename.

know how to access names in templatized base classes.

在派生類模板中呼叫基類模板中的函式時,無法直接呼叫,因為可能特例化基類中無此函式,所以c++不會在模板化基類中去尋找。

解決:當我們確保所有特例化版本都支援該介面時

①this->訪問基類模板成員

②using base::func指示編譯器去base中查詢

③base::func顯示訪問,但此時無多型性

factor parameter-independent code out of templates.

因非型別模板引數造成的**膨脹,可通過以函式引數或class成員變數替換template引數。書中將重複定義的invert函式抽取到squarematrixbase中。

use member function templates to accept "all compatible"types.

smartptr< derived >與smartptr< base >完全是兩個型別,不存在轉換關係,為實現smartptr< derived >➡️smartptr< base >轉換

使用成員函式模板生成「可接受所有相容型別的函式」。

宣告member templates用於「泛化copy構造」或「泛化assignment操作」,並不會阻止編譯器生成它們自己的copy建構函式。

template

<

typename t>

class

shared_ptr

private

: t *mem_p;

};

define non-member funtions inside templates when type conversions are desired.

use traits classes for information about types.

be aware of template metaprogramming.

template metaprogramming(tmp)可將工作由執行期移往編譯期,因而得以實現早期錯誤偵測和更高的執行效率。

模板與泛型程式設計

模板是泛型變成的基礎。泛型程式設計 編譯與型別無關的 是一種復用的方式,模板分為模板函式和模板類。模板函式是乙個通用的函式模板,而不是為每一種型別定義乙個新函式,乙個函式模板就像乙個公式,針對不同型別函式生成不同的函式版本。關鍵字 template 以 template 開始,後面跟乙個模板引數列表...

模板與泛型程式設計

泛型程式設計 編寫與型別無關的通用 是 復用的一種手段。模板是泛型程式設計的基礎。函式模板代表了乙個函式家族,該函式模板與型別無關,在使用時被引數化,根據實參型別產生函式的特定型別版本。模板的格式 template 返回值型別 函式名 引數列表 模板分為類模板和函式模板 模板它本身並不是函式,是編譯...

模板與泛型程式設計

一 函式模板 模板定義以關鍵字template開始,後跟乙個模板引數列表,在模板定義中,模板引數列表不能為空。模板型別引數 型別引數前必須使用class或typename關鍵字。非型別模板引數 表示乙個值而不是乙個型別 陣列引用形參 arr兩端的括號必不可少 void print int arr 1...