Salut, je me baladais tranquillement dans search.h, lorsque je suis tombe nez a nez avec ca :
Quelqun peut m'expliquer a quoi sert cette definition ?Code:
1
2
3 /* Opaque type for internal use. */ struct _ENTRY;
Version imprimable
Salut, je me baladais tranquillement dans search.h, lorsque je suis tombe nez a nez avec ca :
Quelqun peut m'expliquer a quoi sert cette definition ?Code:
1
2
3 /* Opaque type for internal use. */ struct _ENTRY;
C'est très simple.
En C il est possible de masquer l'implémentation d'une structure, c'est-à-dire son contenu, mais de travailler quand même avec (en utilisant un pointeur sur cette structure).
Exemple, je réalise un module pour manipuler des zones de texte. Je peux en manipuler plusieurs, donc pour chaque zone de texte j'ai un pointeur vers la structure qui contient les données, que je passe à chaque fonction. Mais le contenu de la structure, je ne veux pas la dévoiler. Voici comment je fais :
Tant que je n'ai besoin ni d'accéder à un membre de la zone de texte, ni de connaître la taille de la structure, je n'ai pas besoin de préciser le contenu de la structure. Je le définirai dans le fichier .c associé.Code:
1
2
3
4
5 typedef struct zdt * zdt_t; zdt_t creer_zdt(void); void detruire_zdt(zdt_t z); void ajouter_texte_zdt(zdt_t z, const char* texte);
Oki, donc si j'ai bien compris, l'implementation sera selon le .h ou le .c inclus.... mais il ne peut pas y avoir plusieurs implementations differentes en meme temps !?
Normalement non, le but est simplement de cacher le centenu de la structure, c'est de l'encapsulation...Citation:
Envoyé par Gogoye
Maintenant que l'implementation est cachée, qui sait ce qui se cache reelement derriere le type opaque ? Or il est possible de faire en C de l'heritage, donc oui plusieurs implementations sont possibles, mais ce n'est pas le but du type opaque.
Le but réel c'est de diminuer les dépendances, une modification de la structure n'engendre pas de recompilation des sources l'utilisant an tant que type opaque... et d'éviter une mauvaise utilisation des champs de structure.
Oki, merci !