En Efectivo C++ (3ª edición), Scott Meyers, en el Ítem 31, sugiere que las clases deberían tener, además de su declaración clásica (. h) y archivos de definición (.cpp), un archivo Forward Declaration Include (fwd.h), qué clase que no necesita la definición completa puede usar, en lugar de declararse hacia adelante.La declaración directa incluye, además de la declaración, incluir (ClassFwd.h + Class.h)
De alguna manera veo el caso, pero realmente no veo esto como una opción viable ... Parece muy difícil de mantener, más bien exagerado y apenas necesario.
Sin embargo, puedo ver su uso para declaraciones de plantilla hacia adelante, que son bastante pesadas. Pero para las clases simples? Parece que es difícil de mantener y creará una gran cantidad de archivos de inclusión casi vacíos que sirven para un propósito muy pequeño ... ¿vale la pena la molestia?
Aquí está un ejemplo:
// Class.h
class Class
{
Class();
~Class();
};
// ClassFwd.h
class Class;
// Class.cpp
Class::Class()
{
}
Class::~Class()
{
}
Mi pregunta:
¿Qué piensan ustedes? Si esta es una buena práctica?
NOTA Estoy más que interesado en los argumentos PARA ESTA práctica, para ver si me perdí algo que me haría estar de acuerdo con Scott Meyers.
Gracias por la respuesta, sin embargo, usted está simplemente diciendo lo que hace, no por qué lo hace. El único argumento que proporciona es para shared_ptr, que ya resolví teniendo una macro FORWARD_SHARED(), que reenvía declara una clase y su puntero automáticamente. Esto es muy liviano y fácil de leer ... – Geeho
Ok, la razón es para reducir el tiempo de compilación y centralizar las declaraciones hacia adelante. Si todas las declaraciones avanzadas están en un archivo, es fácil agregar nuevas cuando se realicen nuevas clases. Lo mismo con puntero typedefs. Por qué el tiempo de compilación es reducido debería ser obvio. ¿Tiene sentido esto para ti? Mantener los archivos de encabezado limpios de cualquier cosa que no sean declaraciones anticipadas ayudará a medida que su base de código crezca. –
¡Ah! ¡Entonces tienes un único archivo Fwd.h! ¡No uno por encabezado! Ahora veo cómo puede tener sentido ... Muy bien, reflexionaré sobre eso por un tiempo ... – Geeho