Supongamos que tengo clase como esta (simplificado):¿Qué es este patrón de diseño? ¿Cómo usarlo?
class Foo_p;
class Foo
{
private:
Foo_p *p;
public:
Foo();
/* methods, etc... */
};
Esta clase es una parte de una API. El Foo_p es todas las partes privadas de la clase, que no son declaradas en la clase Foo, como de costumbre, sino en una clase declarada a futuro separada que solo es utilizada por la implementación subyacente no visible en el exterior.
He visto este patrón usado en un par de proyectos, ¿hay un nombre para él?
Además, ¿cómo lo uso correctamente (por ejemplo, seguridad de excepción, etc.)? ¿A dónde debería ir la implementación real? En la clase Foo, como de costumbre, ¿solo usando Foo_p para el almacenamiento de datos, o en la clase Foo_p con Foo siendo solo un envoltorio?
No tanto los encabezados y los niveles normales de protección (público/privado) "esencialmente ocultar la aplicación"? –
@Matthew: Desafortunadamente, no. Debe incluir encabezados de implementación, que a menudo pueden ser incómodos cuando dependen, por ejemplo, de los encabezados de Windows, que son despreciablemente malos. – Puppy
@MatthewFlaschen: Sí, pero solo en el sentido de que no puedes acceder a él, pero aún puedes * ver *, al mirar el código. – bitmask