c++ 模板特化與局部特化


c++ 模板特化與局部特化

模板的由來是要處理泛化,也就是任何類型都可以處理。但是泛化的同時,如果針對某種特殊的類型,又更加效率的處理方法。c++提供針對特殊的類型,可以定義不同的處理方法。針對某種特殊類型去處理的方式就叫做特化。

特化分全部特化和局部特化

全部特化:

template<typename T> class test{
    T i;
};
template<> class test<int>{
    int i;
};

通過上面的例子可以看出,可以針對類型int,定義一個新的處理。當外部使用時,穿進來的類型是int的話,就會進入到特化定義的類里。

局部特化種類1:把模板類型列表里,部分的類型,特化。

template<typename T, typename M> class test{
    T i;
    M m;
};
template<typename M> class test<bool, M>{
    int i;
};

上面的例子,把類型T特化了,類型M保留了,所以是部分特化。也就是當外部使用時,穿進來的T的類型是bool類型的話,就進入到特化定義的類里。

局部特化種類2:限定泛化類型,比如限定成指針。

template<typename T> class test{
    T i;
};
template<typename T> class test<T*>{
    T i;
};
template<typename T> class test<const T*>{
    T i;
};

上面的例子,把類型限定了,如果外部穿進來的是指針則有特殊的處理,如果穿進來的是const指針,則有另外的特殊處理。

c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM