请问个关于模板类继承的有关问题

请教个关于模板类继承的问题
类在定义时需要明确的知道基类的完整定义,否则无法定义派生类,因为不这样的话就无法确定类的所需的内存大小了。
那么,对于下面这段代码又为什么可以编译通过呢

template<class T>
class Base
{
public:
    void show()
    {
    }
};

template<class T>
class Derived : public Base<Derived<T>>
{
public:
    void fun()
    {
    }

};


对于上面的代码,只有当Base中有一个T类型的成员变量时才会报错。

难道,当基类中不包含T类型的成员就可以了么?

莫非“不包含T类型的成员”依旧满足“类在定义时需要明确的知道基类的完整定义”这句话?!

------解决方案--------------------
包含T类型变量的时候 不就是无限地归了嘛。
D对象中 包含D对象
------解决方案--------------------
>> 对于上面的代码,只有当Base中有一个T类型的成员变量时才会报错。
>> 难道,当基类中不包含T类型的成员就可以了么?
是滴,当然还有一些其他限制,不过说起来太麻烦了。

>> 莫非“不包含T类型的成员”依旧满足“类在定义时需要明确的知道基类的完整定义”这句话?!
是滴。原因在于主楼的 Base 是类模板,不是类。所以你有疑问的那句话不完全适用于 Base 的情形。具体而言,类模板实例化的时候其定义本身,主楼给出的 Base 定义,实例化过程中不会将 T 类型作为 complete type 来使用,所以没有问题。当然,这并不说明对于普通的类类型也可以这么干。总之就是一句话,类模板和类不是一样的概念。