//模板重载
template<typename T>
T const & MyMax(T const &a, T const &b)
{
return a < b ? a : b;
}
T const & MyMax(T const &a, T const &b, T const &c)
{
return ::MyMax( ::MyMax(a,b),c);
}
//模板特化
template<typename T1,typename T2>
class MyClass
{
//...
};
template<typename T> //局部特化
class MyClass<T,T>
{
//...
};
template<typename T> //局部特化
class MyClass<T,int>
{
//...
};
template<> //完全特化
class MyClass<int,float>
{
//...
};
//模板缺省实参
template<typename T1, typename T2 = int>
class MyClass1
{
//...
};
//非类型模板参数
template<typename T, int temp>
class MyClass2
{
//...
};
template<typename T, int temp = 1>
class MyClass3
{
//...
};
//关键字 typename
template<typename T>
class MyClass4{
typename T::SubType ptr; //SubType 是定义于类 T 内部的一种类型
};
模板是编译时期决定的,与运行时无关.
模板的特化其实就相当于是 一种编译条件, 当模板参数为XX类时 以这种方式编译,如上面中的 MyClasss 的各种特化