Normalmente, casi sin pensar más, uso las declaraciones de reenvío para no tener que incluir encabezados. Algo a lo largo de este ejemplo:Alternativa a las declaraciones de reenvío cuando no desea #include
//-----------------------
// foo.h
//-----------------------
class foo
{
foo();
~foo();
};
//-----------------------
// bar.h
//-----------------------
class foo; // forward declaration
class bar
{
bar();
~bar();
foo* foo_pointer;
};
Algunos desarrolladores les gusta usar este método para evitar problemas con los círculos de inclusión. Prefiero utilizarlo para minimizar los gastos generales en las jerarquías de inclusión extensas, una parte importante del diseño físico (para proyectos más grandes en particular).
Sin embargo, en algunos casos, realmente me gusta declarar a los miembros como objetos normales en lugar de indicadores para beneficiarse del mecanismo automático de construcción/destrucción. Esto nos lleva al problema de que las declaraciones prospectivas no se pueden utilizar más, ya que el compilador necesita la definición de clase en tal caso, por ejemplo:
//-----------------------
// foo.h
//-----------------------
class foo
{
foo();
~foo();
};
//-----------------------
// bar.h
//-----------------------
class foo; // Not enough given the way we declare "foo_object"..
#include "foo.h" // ..instead this is required
class bar
{
bar();
~bar();
foo foo_object;
};
Por lo tanto, yo sería feliz si alguien conoce una construcción del lenguaje alternativo que puede ser utilizado aquí para que pueda declarar "foo_object" como se muestra en el ejemplo, pero sin incluir su encabezado.
Saludos
/Robert
¿esto todavía no requiere la inicialización de foo_ptr en el constructor de la barra? –
de hecho, lo hace. jeje –
¿Y qué pasa si no puedes usar punteros automáticos? – xan