Я знаю, что могу сделать:
class Foo;
но я могу переслать объявление как наследование от другого, например:
class Bar {};
class Foo: public Bar;
Примером использования может служить вариант совместного использования ссылок.
// somewhere.h
class RA {}
class RB : public RA {}
... и затем в другом заголовке, который не включает где-нибудь. 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()
, является то, что RB
имеет RA
как общедоступный базовый класс. Теперь, очевидно, вам понадобится где-нибудь. H, если вы намереваетесь делать какие-либо разыменования возвращаемых значений из Foo
. Однако, если некоторые клиенты никогда не звонят Foo
, тогда нет причин для их включения где-нибудь. H, что может значительно ускорить компиляцию.