日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 模板特化

發布時間:2025/3/19 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 模板特化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 模板的特化

在使用模板時,可以實現一些與類型無關的代碼,但對于一些特殊類型的可能會得到一些錯誤的結果。這時就一些需要特殊處理(對模板進行特化)。

在原模板類的基礎上,針對特殊類型所進行特殊化的實現方式。

模板特化又分為:函數模板特化、類模板特化。
?

  • 函數模板特化

template<class T> bool IsEqual(T& left, T& right) { return left == right; }

上述模板判斷是否相等。若我們傳兩個字符串進行比較,對于字符串而言不能直接比較。因不能直接使用當前的模板函數,所以此時我們就需要對該類型特化出一個模板函數(就是寫出一個模板函數專門給該類型使用)。

函數模板特化規則:

1. 必須要先有一個基礎的函數模板

2. template后接空的尖括號<>

3. 函數名后跟一對尖括號,尖括號中指定需要特化的類型

4. 函數形參表:?必須要和模板函數的基礎參數類型完全相同

加上下面這段特化字符串就能比較了

template<> bool Isequal<char*>(char*& p1, char*& p2){return strcmp(p1, p2) == 0; }

?

  • 類模板特化?

類模板特化又分為:全特化、偏特化。

全特化:將模板參數類表中所有的參數都確定化

template <class T1, class T2> class Test1{ }//全特化 template <> class Test1<int , char>{ }

偏特化:任何針對模版參數進一步進行條件限制設計的特化版本。?

偏特化又為兩種:部分特化、參數更進一步限制。

? ? ? ? ? ? 部分特化:將模板參數類表中的一部分參數特化

template <class T1, class T2> class Test2{ }//部分特化 template <class T1> //此處只需寫未進行特化的模板類型,特化過的就不用寫 class Test2<T1 , char>{ }

? ? ? ? ? ?參數更進一步限制

template <class T1, class T2> class Test2{ }//兩個參數偏特化為指針類型 template <class T1 , class T2 > class Test2<T1* , T2*>{ } //兩個參數偏特化為引用類型 template <class T1 , class T2 > class Test2<T1& , T2&>{ }

Test2<double , char> d1;? ? ? ? ? ?// 調用特化的char版本 ? ?

Test2<int , double> d2;? ? ? ? ? ? ? // 調用基礎的模板 ? ? ? ?

Test2<int *, int*> d3;? ? ? ? ? ? ? ? ? // 調用特化的指針版本 ? ?

Test2<int&, int&> d4(1, 2);? ? ? ? // 調用特化的引用版本

總結

以上是生活随笔為你收集整理的C++ 模板特化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。