如何转发声明从前向声明的模板基类派生的类?

时间:2012-04-05 16:19:38

标签: c++ class templates forward derived

我正在尝试转发声明一个派生自模板类的类,该类也必须是前向声明的。

以下是类的示例:

class TType {
public:
    TType() { }
};

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

class Derived : public Base<TType> {
public:
    Derived() { }
};

这是对我需要的失败猜测:

class TType;
template<typename T> class Base;
class Derived : public Base<TType>;  // This fails
Derived* pDerived;

1 个答案:

答案 0 :(得分:5)

只需转发声明类名:

class Derived;

您不能在声明中包含有关课程的任何其他信息;基类,成员等只能在类定义中声明。

此前向声明可用于执行各种操作,包括声明指针或引用(例如示例中的pDerived),以及使用Derived声明函数作为参数或返回类型。如果您需要做任何需要知道类的大小,基类或成员的事情,那么您将需要完整的定义。