Bonjour,
Je travaille sur un projet personnel de bibliothèque en C orienté objet (TAD).
J'aimerais implémenter un mécanisme de comptage de référence. Pour ça, tous mes TAD doivent contenir un compteur, et une fonction doit pouvoir utiliser ce compteur de façon générique, c'est-à-dire que j'aimerais éviter de redéfinir les fonctions de manipulation de ce compteur pour chaque TAD.
J'aimerais pouvoir faire la chose suivante :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 struct MonTAD { struct gestionReferences; /* ... autres membres */ }; struct AutreTAD { struct gestionReferences; /* autres "autres membres" */ }; void Incrementer(void *tad) { struct gestionReferences * gestionnaire = (struct gestionReferences *)tad; gestionnaire->compteur++; } void Decrementer(void *tad) { struct gestionReferences * gestionnaire = (struct gestionReferences *)tad; gestionnaire->compteur--; if (gestionnaire->compteur == 0) gestionnaire->DestructeurAffecteParLeContructeurDuTAD(); }
La logique me dit que c'est possible, mais j'aimerais m'assurer qu'il n'y a pas de problèmes de décalage d'adresse entre l'adresse du TAD et l'adresse de son premier membre, ou si au pire je devrais passer par une structure de ce genre :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 struct TADGenerique { struct gestionReferences; };
Merci,
Spootnik![]()
Partager