c 學習筆記(六) 模板定義

2022-09-18 09:18:23 字數 1282 閱讀 5557

編輯器遇到乙個模板定於時,不會生成**,而是在使用的時候生成**。

所以在宣告的時候,就需要知道定義。即函式模板和類模板的成員函式的定義通常放在標頭檔案中。

在乙個類模板的作用於內,我們可以直接使用模板名而不必指定模板實參。

templateusing twin = pair;

twinbooks; // books是pairtwinbooksno; // booksno是pair

目的是為了避免在多個檔案中例項化相同模板,導致額外開銷嚴重的問題

extern template declaration;  //宣告

template declaration; //定義

extern template class blob;

template int compare(const int& a, const int& b);

當我們希望通知編輯器乙個名字表示型別時,必須使用關鍵字typename,而不能使用class

成員模板不能是虛函式

將實參傳遞給帶模板型別的函式形參時,能夠自動應用的型別轉換只有const轉換及陣列或函式到指標的轉換

template t fobj(t, t);

template t fref(const t&, const t&);

int a[10], b[42];

fobj(a, b); // fobj(int* ,int *)

fref(a, b); // 錯誤:陣列型別不匹配

如果乙個模板直接匹配,而另乙個模板要型別轉換才能匹配,則優先前者。

如果匹配的過載是提供同樣好的匹配的話,按照以下規則判斷

非模板函式和模板函式,優先前者

多個過載模板對乙個呼叫提供同樣好的匹配時,應選擇最特例化的版本

如果都不滿足,則此呼叫有歧義

規則2樣例:

template rep (const t &t);

template rep (t *t);

string s("1");

const string* sp = &s;

rep(sp);

// 這裡會呼叫第二個

// 【const t &t】本質上可以用於所有型別,【t *t】只能用於指標

// 所以第二個更特例化

template rep (const args&... rest)

Opencv 學習筆記(六)模板匹配

菜鳥一枚,這是我的第六個部落格,剛剛入門opencv,想將自己的學習過程分享給大家!include stdafx.h include include opencv highgui 模組 include opencv 影象處理標頭檔案 using namespace cv define window ...

C 學習筆記(六)

函式 函式時乙個命名了的 塊,通過呼叫函式執行相應的 可以有0個或多個引數,通常會產生乙個結果。1.乙個典型的函式包含了四個部分 返回型別,函式名,形參列表以及函式體。2.函式的呼叫完成兩項工作 一是用是引數 隱式的 初始化函式對應的形參,當呼叫乙個函式時,首先建立乙個同型別的變數a,然後將a初始化...

c 學習筆記六

指標 可以使用指標記號操作儲存在陣列中的資料 可以在函式中訪問函式外部的大塊資料 動態為新變數分配空間 1 指標的宣告 long pnumber 2 位址運算子 例如 long number 1234l long pnumber pnumber number 3 間接運算子 4 指標的初始化 可以用...