私はできることを知っています:
class Foo;
しかし、次のように、クラスを別のクラスから継承するものとして前方宣言できますか?
class Bar {};
class Foo: public Bar;
ユースケースの例は、共変参照の戻り値の型です。
// somewhere.h
class RA {}
class RB : public RA {}
...そして、somewhere.hを含まない別のヘッダーで
// 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()
ものです。からの戻り値の何らかの種類の逆参照を行う場合は、明らかにどこか.h が必要になります。ただし、一部のクライアントが をまったく呼び出さない場合、コンパイルを大幅に高速化する可能性がある where.h をインクルードする理由はありません。RB
RA
Foo
Foo