J'ai un grand nombre de types de données distincts (processus, fichiers, threads, fonctions, etc.) qui sont définis dans des fichiers courts et simples .c
/.h
. Une fois que j'ai terminé la mise en œuvre des pièces individuelles et conclu les tests de couverture d'unité/code, je suis passé à la connexion des pièces ensemble.struct avec pointer-to-parent-struct: meilleure approche
L'implémentation actuelle utilise pointeur-à-parents- struct
via (void *)
pointeurs dans le code, à savoir:
struct typeB {
int B;
void *parent;
};
struct typeC {
int C;
void *parent;
};
struct typeA {
int a;
struct typeB *pB;
struct typeC *pC;
};
J'utilisé void *
pointeurs en raison de la façon dont certains struct
s sont compliquées, et ils ne seront pas compiler si j'utilise réelle pointer-to-struct-type
à la place de void *
.
Il existe quelques fonctions où typeB
et typeC
doivent se parler, mais elles sont rares. En outre, ces deux struct
n'ont jamais besoin de connaître int a
dans le parent
.
je pouvais supprimer les parent struct
pointeurs et factoriser mes prototypes de fonction/définitions à de simples accepter tous (struct typeA *)
comme argument, accéder aux sous-structures, etc., mais il semble exagéré, car plusieurs fonctions juste besoin d'avoir accès à typeB
/typeC
structures et leurs éléments. Existe-t-il une norme de facto (non-cargo-cult-programming) pour gérer une telle organisation de structures (similaire à la règle "ne pas lancer malloc()
" que je vois si souvent sur ce site)?
Merci.
Déclarations avancées. Utilise les. –
@ n.m. C'est suffisant. Au-delà de cela, y a-t-il des soucis importants avec l'utilisation de la logique pointeur vers parent-struct? Je vous remercie. – DevNull
Si vous essayez d'implémenter l'héritage, assurez-vous d'aligner le pointeur parent à la 0e partie de la structure afin que le décalage soit 0 –