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

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

相關文章
相關標籤/搜索