//模板重载 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 的各种特化