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个或多个或参数包的实参。