模板:
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都是形參名。