C 模板 函式模板基本 說明

2021-08-13 19:02:48 字數 1424 閱讀 8392

c++模板是個很重要的東西,但是現實中,我幾乎沒寫過模板,幾乎都快忘記這個東西,前兩天學習了,意識到這個問題,主要是準備學習c++11,初步學習,舉步維艱,發現不會模板學習有些費勁,覺得很難理解,所以今天來說明下函式模板最基本說明,其實模板挺複雜的,應該,我只看了一點都覺的很繞,還有很多坑,估計這個寫本書沒啥問題,我也只是記錄基本程度的一點心得,

一 重要的規則:這一點很多資料能說出一堆,說的很多很細緻,我來說幾個比較重要的,

1.模板型別,推薦用typename,雖然效果等同於class,但是有些場合必須使用typename ,當然這個尤其是使用類模板時你會用的到,應該是成員函式模板(類模板還沒開始學習呢)

2.指定的非類型別(不是class,基本型別比如int,double),只能使用int型別,template,其他型別不允許,(char貌似也是可以,某種程度的int,可能是這個原因吧)

template

void f()

這段**放到vs2003下編譯沒問題,但ubuntu,gcc5.4有問題,我記得使用vs2017也是不行的,這很可能是c++11已經不支援這個了,在vs2003下甚至可以f<5.5>(),但是c++11不支援,指標和引用都是可以的,如double*,

二 **示例比較容易些,網上能找到一片

1 普通

template

//1 普通模板

void fun(t a)

template

<> //2 特化模板

void fun(int a)

template

//3 實際是普通模板

void fun(int a)

int main()

如上,這裡要說明的是,第二個特化模板不能單寫的,必須先有普通模板,然後寫上特化模板才行,只寫特化模板會直接報錯,第三個,實際是乙個明確型別的普通模板,這個的一些規則我們上面講過,常量,全域性變數能讓他推導出型別的引數,這個可以單獨寫出來,儘管,有時候你可以fun(a)不加<>也能匹配,但個人覺得這個並不好,c++的語法讓人討厭的乙個地方,

其中第三個,c++11中分數就是這麼搞得,當時看的我頭暈,所以只能回頭看模板怎麼寫

2 指標和引用

template

void fun(double d)

double d = 10.0;

int main()

這個搞了很久,才明白是這麼呼叫的,記得我們上面的規則,明確型別,只准使用int

3 同乙個檔案宣告和實現可以分開寫

template

void foo();

int main()

template

void foo()

;

C 模板 函式模板和模板函式

1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字...

C 模板 函式模板和模板函式

1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字...

C 模板 函式模板和模板函式

1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字...