類模板特化

編輯

全特化

編輯
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個或多個或參數包的實參。