函数模板的特化
template <class T> int compare(T v1,T v2) { if(v1<v2) return -1; else if(v1>v2) return 1; else return 0; } template <> int compare<char *>(char * s1,char * s2) { return strcmp(s1,s2); }
类模板的特化
template <class T> class test { public: void operator()() { cout<<"test<T>"<<endl; } }; template <> class test<char> { public: void operator()() { cout<<"test<char>"<<endl; } };模板的偏特化
template <class T,class O> struct testClass { testClass(){cout<<"I,O"<<endl;} }; template <class T> struct testClass<T *,T *> { testClass(){cout<<"T*,T*"<<endl;} };成员模板
template <class T> class v { public: template <class T1> void insert(int position ,T1 t) { cout<<"insertion"<<endl; } };
根据前面一个模板确定当前的模板参数
template <class T,class S=vector<T> > class test { public: test(){cout<<"test"<<endl;} private: S t; }
模板与友元的绑定
template <class T> class Queue { friend bool operator == <T> (const Queue <T> &t1,const Queue <T> &t2) { cout<<"T,T"<<endl; return true; } };
内联函数模板
inline template <typename T> T min(const T& a,const T & b) { return a<b?a:b; }注意inline 和template的位置不能互换
模板内部指定类型
template <class T> class test { public: typename T::size_type t; //模板内部定义类型 };
非类型模板形参
template <class T,size_t N> void arr(T (¶)[N]) { int i=0; for(i=0;i<N;i++) cout<<para[i]<<endl; };
原文地址:http://blog.csdn.net/u011608357/article/details/38668779