最佳答案
我知道我能做到:
class Foo;
但是我可以将一个类前向声明为继承自另一个类吗,比如:
class Bar {};
class Foo: public Bar;
协变引用返回类型是一个示例用例。
// somewhere.h
class RA {}
class RB : public RA {}
... 然后在另一个标题,不包括某处
// other.h
class RA;
class A {
public:
virtual RA* Foo(); // this only needs the forward deceleration
}
class RB : public RA; // invalid but...
class B {
public:
virtual RB* Foo(); //
}
编译器 应该处理 RB* B:Foo()
声明所需的唯一信息是 RB
将 RA
作为公共基类。现在,如果您打算对 Foo
的返回值进行任何类型的解引用,那么显然您需要 someone. h。但是,如果一些客户端从来不调用 Foo
,那么就没有理由包含可能大大加快编译速度的 someone. h。