首页 > 代码库 > c++模板的一些语法

c++模板的一些语法

函数模板的特化

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 (&para)[N])
{
	int i=0;
	for(i=0;i<N;i++)
		cout<<para[i]<<endl;
};