C/Cpp / STL / 模板全特化和偏特化
生活随笔
收集整理的這篇文章主要介紹了
C/Cpp / STL / 模板全特化和偏特化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
栗子
#include <iostream>template <typename T1, typename T2> struct Test {void Print() { std::cout << "原生版本" << std::endl; } };template <typename T2> struct Test<float, T2> {void Print() { std::cout << "偏特化版本" << std::endl; } };template <> struct Test<int, double> {void Print() { std::cout << "全特化版本" << std::endl; } };int main() {Test<double, int> t1;t1.Print();Test<float, double> t2;t2.Print();Test<int, double> t3;t3.Print();return 0; }結果
原生版本 偏特化版本 全特化版本說明
模板特化,顧名思義,就是對于模板類,針對特定的數據類型進行再次聲明,從而達到模板特殊處理的目的。這里面的特化分為偏特化和全特化,區別如下:
- 偏特化是指定了部分類型,所以偏特化版本稱為原生版本的子集。若實例化時參數類型為指定的類型,則優先調用特例化版本的代碼。
- 偏特化本質上其還是模板。
- 全特化本質上是一個實例,當編譯器匹配時會優先匹配參數一致的實例
模板特化的功能在STL中廣泛使用,例如?__type_traits ,通過模板特化,可以達到判斷型別是否是原生類型、指針類型以及類類型的目的。
?
(SAW:Game Over!)
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的C/Cpp / STL / 模板全特化和偏特化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux / argv、environ
- 下一篇: C/Cpp / STL / vector