类模板比较好理解:
template<typename T ,int inH=10>
class TEP
{
public:
void fun();
virtual void foo();
TEP();
TEP(const TEP<T>&src);
template<typename E>
TEP(const TEP<E>&src);
TEP<T>&operator=(const TEP<T>&rvl);
template<typename E>
TEP<T>&operator=(const TEP<E>&rvl);
protected:
int data;
};
我要重点讲讲类成员模板在类内定义和内外定义的区别
(1)类内定义
template<typename T ,int inH=10>
class TEP
{
public:
void fun();
virtual void foo();
TEP();
TEP(const TEP<T>&src);
template<typename E>//这个就是类成员模板的标志
TEP(const TEP<E>&src)//类内定义
{
data=src.data;
}
TEP<T>&operator=(const TEP<T>&rvl);
template<typename E>
TEP<T>&operator=(const TEP<E>&rvl);
protected:
int data;
};
(2)类外定义
template<typename T ,int inH>//这是类外定义不可少的,要记住添加类模板
template<typename E>//然后才是类成员模板
TEP<T,inH>::TEP(const TEP<E>&src)
{
data=src.data;
}
严格的将类中的成员方法都是函数模板,但是还是在定义和使用中有一点点不同
函数模板:
template<typename T>
void fun()
{
cout<<"fun()"<<endl;
}
//下面这是函数的特殊化,意思就是当指定fun<char>in,就只会调用特化的标志函数,其他如fun<int>ib,还是会调用以前未特化的函数模板
void main()
{
fun<int> in;
in.fun();
}
template<class T>
void fun(T a)
{
cout << "void ->fun()"<<a<<endl;
}
template<>//特殊化标志
void fun(char a)
{
cout << "char ->fun()"<<a<<endl;
}