2008-10-15 26 views
32

¿Hay alguna forma de ocultar los miembros de datos privados de una clase de C++ de sus usuarios en el archivo cpp? Pienso en los miembros privados como parte de la implementación y parece un poco retrospectivo declararlos en el archivo de encabezado.Esconder datos privados miembros? (C++)

Respuesta

52

La expresión "pimpl" es la forma en que esto se maneja generalmente.

Ver

+0

Gracias, funciona ahora. Esos dos artículos explican bien la expresión idiomática. – jeffythedragonslayer

+0

¿Tiene algún impacto en el rendimiento? – jjxtra

+0

En general, sí, esto podría tener un impacto en el rendimiento, ya que hay una desreferencia de puntero involucrada cada vez que se accede al material privado. Sin embargo, un compilador puede optimizarlo de modo que el impacto sea insignificante. –

4

La forma clásica de hacerlo es con un puntero de proxy para una clase interna que implementa la funcionalidad. No hay forma de hacer definiciones parciales de clase en C++ que yo sepa.

1

Yendo comercial? ;)

Puede crear archivos de encabezado, en los que solo declara la API pública y protegida.

Al usuario solo se le presentan estos, que pueden incluir. Ellos vinculan su código con una biblioteca, que usted construyó usando la API completa y las definiciones.

Para funciones en línea: asegúrese de que se usen en un código no enchavetado, luego habrá una definición disponible en la biblioteca (no estoy seguro de que esté en línea en la implementación del usuario, sin embargo).

Para el código de plantilla no hay un camino real. Una solución a medias es hacer código, que utiliza el código de plantilla con diferentes tipos de objetos. El usuario se limitará a estos, porque son las únicas definiciones disponibles en su biblioteca.

Cuestiones relacionadas