sé que puedo hacer:En C++, ¿es posible reenviar declarar una clase como heredada de otra clase?
class Foo;
pero puedo adelante declarar una clase que hereda de otra, como: referencia
class Bar {};
class Foo: public Bar;
un caso de ejemplo de uso que se co-variante tipos de devolución
// somewhere.h
class RA {}
class RB : public RA {}
... y luego en la otra cabecera que no incluye 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(); //
}
La única información que el compilador debe necesidad de procesar la declaración de RB* B:Foo()
es que RB
tiene RA
como una clase base pública. Ahora claramente necesitaría algo en algún lugar. Si tiene la intención de desterrar los valores de devolución de Foo
. Sin embargo, si algunos clientes nunca llaman al Foo
, entonces no hay ninguna razón para que ellos incluyan somewhere.h, lo que podría acelerar significativamente la compilación.
¿Por qué lo necesitarías? – Pace
@Pace tipos de devolución de referencia co-variante. (Ver, editar.) Pero no estoy seguro de que las herencias múltiples no lo arruinen. – BCS
Posible duplicado de [El puntero al tipo de clase incompleto no está permitido] (https://stackoverflow.com/questions/12027656/pointer-to-incomplete-class-type-is-not-allowed) – Archmede