C++/類模板
< C++
類模板特化
編輯全特化
編輯template<typename T>
class Base
{
......
};
template<>
class Base<int> // Base类针对int类型的特化
{
......
};
int main()
{
Base<int> b; // 在实例化的时候会选择特化版本而不是原始版本的模板类。
}
偏特化
編輯template<typename T>
class Base
{
......
};
template<typename T> // Base类针对T的指针类型的偏特化
class Base<T*>
{
......
};
template<typename T1, typename T2>
class Base1
{
......
};
template<typename T2> // Base类针对多个模板参数中的其中一个或多个的类型偏特化
class Base1<int, T2>
{
......
};
默認模板參數
編輯template<typename T = int>
class Base
{
......
};
itn main()
{
Base a; // 没有显示指明模板类的模板参数时,会调用默认的模板参数(如果有的话)
}
模板的模板參數
編輯模板的模板參數(template template parameter)是指一個模板的參數是模板類型。只有類模板允許其模板參數是模板類型;函數模板不允許具有這樣的模板參數。
模板的模板參數,其實參應當是類模板名字或者別名模板(alias template)。當模板的模板參數做「形參實參結合」時,僅考慮把實參的基本(即未特化)類模板與模板的模板形參做匹配;不考慮實參的偏特化類模板,即使偏特化後的參數列表與模板的模板形參匹配得上。
模板的模板實參的參數的預設值被忽略,即匹配時當作不存在預設值。模板參數包不能匹配一個模板形參。反之,模板的形參是個參數包,則可以匹配0個或多個或參數包的實參。