函数模板特
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;
};
版权声明:本文博客原创文章,博客,未经同意,不得转载。