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...