por lo general utiliza el avance declaración predominantemente, si tengo una clase que no necesita definición completa en el archivo .hppDeclaración de variables Forward/clases de espacio de nombres std
Ex)
//B.hpp
namespace A_file {
class A;
}
namespace B_file {
class B {
public:
B();
private:
A *ptr_to_A;
}
}
//B.cpp
#include "A.hpp"
using namespace A_file;
namespace B_file {
B(int value_) {
*ptr_to_A = new A(value_);
}
int some_func() {
ptr_to_A->some_func_in_A();
}
}
escribo esto tipo de código Creo que lo salvará, incluyendo todo el hpp nuevamente. (Siéntase libre de comentar, si lo cree, esto no es saludable)
¿Hay alguna forma de que yo pueda hacer lo mismo con los objetos/clases en el espacio de nombres estándar? Si hay alguna manera, ¿está bien o tiene efectos secundarios?
+1. De manera predecible, el precedente establecido por '' también es la mejor práctica: prefiere tener un encabezado de declaración adicional, incluido por el encabezado "normal" para obtener verificaciones en tiempo de compilación para la validez continua, y por clientes que solo necesitan las declaraciones directas . Debería "vivir" y mantenerse con la biblioteca cuyo código es "forward" declara, ¡no el código del cliente! La razón exacta dada en el método anterior de GotW dirige esto: las estructuras pueden convertirse en tipos de plantillas, las plantillas pueden agregar argumentos, etc. –