看下面的代码例子
///定义一个模板基类
template <class T>
class MyBase
{
private:
///如果用 class MyDerive : public MyBase<MyDerive> 实例化这个模板,
///则这里不能用变量的形式,要用指针或引用的形式,否则编译不能通过
///但如果用 int 这样的类型实例化,可以用变量的形式
///这与提前声明相似
T *m_a;
T m_b; ///编译不能通过
public:
T Sub(T a, T b); ///这里可以用变量的形式
};
template <class T>
T MyBase<T>::Sub(T a, T b)
{
return a;
}
///定义一个继承类,注意它是从 MyBase<MyDerive> 产生的基类中继承下来的
///MyBase<MyDerive> 利用模板实例化产生了一个新类
class MyDerive : public MyBase<MyDerive>
{
private:
int m_x;
int m_y;
public:
MyDerive(int x, int y)
{
m_x = x;
m_y = y;
}
};