c++ - 如何转发声明从转发声明的模板基类派生的类?

标签 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;

最佳答案

只需向前声明类名:

class Derived;

您不能在其声明中包含有关类的更多信息;基类、成员等只能在类定义中声明。

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

关于c++ - 如何转发声明从转发声明的模板基类派生的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10032275/

相关文章:

c++ - ubuntu 18.04 上的 gcc/g++ 7.3.0 链接错误

c++ - 如何处理 11000 行 C++ 源文件?

Wordpress 中表格的 CSS

C++ typedef 和子类化

c++ - 与 XTR-DH Crypto++ 的 key 协议(protocol)

c++ - 在模板类中编写的 lambda 函数不支持 restrict(...) 吗?

python - 如何 split() 字符串并将其传递给对象的 __init__() 方法?

c++ - 手写链表出现段错误,我不明白为什么

c++ - constexpr 连接两个或多个 char 字符串

C++ 和通用图距离算法