模板:
1,函数模板
template <class(typename) T, ...(非类型参数,int var)>
T add(T &a)
{
//函数体
}
非类型参数只能是,整型,指针,引用。以上T可以有对应的默认值
2,类模板
template <class T>
class A
{
//类体
}
template <class T,...>
void A<T>::func()
{
//函数体
}
以上:可以有非类型参数,T可以有默认值。
3,友元函数模板如下。如下包括模板,友元,重载,可以好好理解一下。
template <class T = int>
class A
{
public:
A(int);
template <class M, class N>
friend M operator+(A<M> &, A<N> &);
private:
T p;
};
template <class H>
A<H>::A(int num)
{
p = num;
}
template <class M, class N>
M operator+(A<M> &c, A<N> &d)
{
return (c.p+d.p);
}
int main(int argc, char *argv[])
{
A<char> a(65);
A<int> b(3);
cout << a+b << endl;
return 0;
}
注意:T,H,M,N都是形参名。