Existe-t-il un moyen de masquer les membres de données privés d'une classe C++ loin de ses utilisateurs, dans le fichier cpp? Je pense aux membres privés dans le cadre de la mise en œuvre et il semble un peu en arrière de les déclarer dans le fichier d'en-tête.Masquage de membres de données privés? (C++)
Répondre
L'idiome "pimpl" est la façon dont cela est généralement géré.
Voir
- http://www.gotw.ca/gotw/024.htm
- http://www.gotw.ca/gotw/028.htm
- http://herbsutter.com/gotw/_100/ (mis à jour pour C 11 ++)
La manière classique de faire est avec un pointeur proxy à une classe interne implémente la fonctionnalité. Il n'y a aucun moyen de faire des définitions de classe partielles en C++ que je connais.
Voir Pimpl Idiom
vous voulez utiliser quelque chose comme l'idiome PIMPL
sheesh, je dois être rapide ici –
Going commerciale? ;)
Vous pouvez créer des fichiers d'en-tête dans lesquels vous déclarez uniquement l'API publique et protégée.
L'utilisateur est seulement présenté avec ceux-ci, qu'ils peuvent inclure. Ils lient leur code avec une bibliothèque que vous avez créée en utilisant l'API complète et les définitions. Pour les fonctions inline: assurez-vous qu'elles sont utilisées dans du code non-aligné, alors il y aura une définition disponible dans la bibliothèque (je ne suis pas sûr que ce sera inline dans l'implémentation de l'utilisateur, cependant).
Pour le code basé sur un modèle, il n'y a pas de véritable solution. Une solution demi-hearted est de faire du code, qui utilise le code basé sur un modèle avec différents types d'objets. L'utilisateur sera limité à ceux-ci, car ce sont les seules définitions disponibles dans votre bibliothèque.
- 1. Membres privés et protégés: C++
- 2. Dériver une classe avec des membres privés
- 3. Comment exclure des membres privés de la règle StyleCop SA1600
- 4. Masquage/brouillage de données
- 5. Est-il possible d'accéder aux membres privés d'un cours?
- 6. Existe-t-il un moyen de supprimer des membres privés de Content Assist dans Eclipse?
- 7. Différence entre C# et VB.NET pour les valeurs par défaut des membres privés
- 8. Pourquoi avons-nous besoin de constructeurs et de membres privés dans la classe abstraite?
- 9. Conception de messages privés
- 10. Le constructeur ne peut pas accéder aux membres privés de sa propre classe
- 11. Vb.Net question de portée - champs privés
- 12. Membres de données OCaml sans initialisation
- 13. Masquage des répertoires en C#
- 14. C++ - surcharge Constructor - privés et publics
- 15. Quelle est l'utilisation correcte du mot clé «this» dans les membres du cours privés?
- 16. Problème d'accès des membres de classe C++ avec les modèles
- 17. C#: Accès aux membres d'instance privée hérités par réflexion
- 18. C struct - membres légaux?
- 19. pointeur à des données membres-de-données-membre
- 20. Recevez les flux RSS privés de twitter
- 21. Masquage d'un formulaire de l'utilisateur dans l'application C# windows
- 22. membres non publics - ReflectionAttribute
- 23. Masquage de domaine avec HTML
- 24. Injecter des membres de données à un objet
- 25. Membres de données privées 'access to enclosing class' imbriqués
- 26. /tables Masquage de verrouillage dans oracle
- 27. Masquage d'objets supprimés
- 28. Alignement des membres de la structure dans Visual C++ 2008
- 29. Pointeur de liaison vers les opérateurs membres en C++
- 30. Modificateurs d'accès sur les membres de l'interface en C#
Merci, cela fonctionne maintenant. Ces deux articles expliquent bien l'idiome. – jeffythedragonslayer
Cela a-t-il un impact sur les performances? – jjxtra
En général, oui, cela pourrait avoir un impact sur les performances, car il y a un déréférencement de pointeur impliqué chaque fois que l'on accède au contenu privé. Cependant, un compilateur peut être capable de l'optimiser de sorte que l'impact soit négligeable. –