¿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
La expresión "pimpl" es la forma en que esto se maneja generalmente.
Ver
- http://www.gotw.ca/gotw/024.htm
- http://www.gotw.ca/gotw/028.htm
- http://herbsutter.com/gotw/_100/ (actualizado para C++ 11)
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.
Ver Pimpl Idiom
desea utilizar algo así como el idioma PIMPL
sheesh, tengo que ser rápido por aquí –
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.
- 1. Esconder miembros heredados
- 2. Heredando miembros privados en C++
- 3. Serializar datos de miembros privados
- 4. Miembros privados y protegidos: C++
- 5. Accediendo a miembros privados
- 6. C++ miembros privados de la clase base abstracta
- 7. Declaración de variables de miembros privados
- 8. ¿Por qué definir miembros privados debajo de miembros públicos en C++?
- 9. ¿Puedo transformar un objeto y acceder a los miembros de datos privados en C++?
- 10. Javadoc con Gradle: mostrar también miembros privados
- 11. Acceso a los miembros privados de PowerShell
- 12. ¿Miembros privados en la clase pimpl?
- 13. ¿Cómo ocultar miembros privados de una clase?
- 14. Acceso miembros privados de plugin de jQuery
- 15. ¿Cómo hacer que los miembros de struct sean privados?
- 16. acceso a los datos privados de los miembros de la clase externa en la clase interna
- 17. amigo con clase pero no puede acceder a miembros privados
- 18. Métodos que utilizan miembros privados o accesadores públicos
- 19. C Datos ++ alineación miembros y matriz Embalaje
- 20. ¿Debo usar miembros de datos estáticos? (C++)
- 21. ¿Los miembros privados son realmente más "seguros" en Java?
- 22. == sobrecarga puede acceder a miembros privados de argumento
- 23. Cómo excluir miembros privados de la regla de StyleCop SA1600
- 24. Json.NET Serializar miembros privados y no propiedades de solo lectura
- 25. ¿Cómo puede Spring/Hibernate acceder a miembros privados?
- 26. Clase anidada 'acceso a la clase adjunta' miembros de datos privados
- 27. ¿Cambia el orden de los miembros de datos privados de clase ABI
- 28. Objective-C protocolos "privados"?
- 29. ¿Por qué la biblioteca de cierre de Google no usa miembros privados reales?
- 30. Método para llamar a miembros o métodos públicos/privados. Buenas prácticas: C# .NET
Gracias, funciona ahora. Esos dos artículos explican bien la expresión idiomática. – jeffythedragonslayer
¿Tiene algún impacto en el rendimiento? – jjxtra
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. –