spéculations: strong>
Ainsi, fournir un ensemble unique de méthodes non redondantes qui satisferaient les besoins de toutes les équipes clientes est impossible - les exigences de certaines équipes sont mutuellement exclusives. Fournir uniquement ces méthodes couramment requises par tous les modules est plutôt inutile, car la seule partie commune est probablement, probablement, le destructeur. Lancer toutes les implémentations possibles de toutes les méthodes n'est pas bonne non plus: mauvaise maintenabilité et stabilité, interface gonflée de manière confortable, beaucoup d'affrontements de nom, beaucoup de dépendances du module croisé. P>
3 Réponses :
Une solution éventuelle moins que parfaite à ma propre question:
- strong> Ce que je n'aime pas à propos de cette approche est hostile Syntaxe, non Raii et tous les membres de données sont publics. C'est c, pas c ++. P> + fort> du bon côté, cette approche offre des possibilités de personnalisation illimitées. Aucune restriction sur le choix de la bonne fonction de la tâche. Pas de surcharge de mémoire, pas de surcharge d'exécution (c'est-à-dire techniquement, le compilateur a les mêmes opportunités d'inlinisation et d'optimisation que ces fonctions libres soient des méthodes). P> P>
Il n'est pas nécessaire que les données soient Public Code>. Soit fournir un Setter code> code> et getter qui peut être utilisé par les fonctions non membres, ou déclarer les fonctions comme ami code> s
@Peter Merci pour la suggestion! Liste des ami code> S serait facilement atteint 200 lignes, qui n'est pas impraticable et homicale. Getter Setter individuel ANS pour chaque membre ne ferait que dissimuler le fait. Même si des problèmes d'accès étaient résolus, la syntaxe laide reste toujours.
Tous les types de données dans la bibliothèque STD n'ont qu'une quantité minimale d'une fonction membre, uniquement celles qui sont nécessaires à la mise en œuvre de la mise en œuvre des données et à fournir une interface publique. Toutes les autres sont des fonctions libres. Et si cela est fait correctement, ceci est C ++ et non c. Vous voudrez peut-être jeter un coup d'oeil à un look a the CPPCON 2017: Klaus Iglberger "GRATUITES vos fonctions!" a> parler.
Une solution éventuelle moins que parfaite à ma propre question:
- strong> Ce que je n'aime pas À propos de cette approche, c'est qu'il impose une légère pessimisation en termes d'utilisation de la mémoire et de performance. De plus, la syntaxe rend les objets de type Teama et Teamb ressemblent à des valeurs, tandis qu'elles ont en réalité une référence sémantique. P> + forte> bonne nouvelle est que cette approche permet une meilleure meilleure syntaxe C ++ pour les appels. (Mais toujours, il y a ce videux getcore ()) et rencontre Raii. p> p>
Une solution éventuelle moins que parfaite à ma propre question:
- strong> Cependant, de telles astuces sont interdites par le la norme. Je dois donc refuser cette approche aussi. P> ps L'invalidité de cette approche me met en panne. L'ensemble de la compatibilité de la mise en page semble donner la possibilité de communiquer des données entre processus compatibles ABI ou composants partagés. Dommage que cela ne permet pas de communiquer les données entre les parties de la même application ... p> p>
Il semble que vous ayez besoin de disposer de classes de base qui encapsulent des données, ce qui garantit certaines restrictions et certaines fonctions libres qui fonctionnent avec ces objets. Si similaire à la STD le fait avec des conteneurs (
std :: array code>,std :: vecteur code>,std :: list code>, ...) et algorithmes. Mais il n'est pas vraiment possible de vous dire comment cela devrait être fait dans votre cas particulier, car les détails / problèmes / question nécessaires à votre code ne sont pas connus.