Donc, j'ai du mal à trouver comment surmonter cela.Réutilisation même c ADT pour les autres types
Prenez par exemple, j'ai une mise en œuvre de l'arbre rouge noir qui fonctionne avec des objets:
typedef unsigned long int Key;
struct rbt_node{
Item item;
int color;
Key key;
struct rbt_node* parent;
struct rbt_node* left;
struct rbt_node* right;
};
puis dans un Item.hi définir la structure que je vais utiliser, par exemple:
typedef struct _something* Item;
De cette façon, je découplage l'élément détenu de l'implémentation de l'arborescence. Le problème se pose si je veux réutiliser l'ADT pour d'autres types.
Au moment où je devrais définir un Item2.h, et copier rbt.c/rbt.h à rbt2.c/rbt2.h et les changer pour utiliser Item2.h et changer les noms de fonctions. N'y a-t-il pas une manière plus propre?
J'ai trouvé ce C double linked list with abstract data type, mais il semble y avoir quelques problèmes selon l'architecture et la taille des structures, que je ne connais pas vraiment très bien.
Je suis à la recherche de ce type d'utilisation:
rbt_insert(rbt_of_something, something);
rbt_insert(rbt_of_somethingElse, somethingElse);
Merci
Avec certains fichiers d'en-tête et le préprocesseur, vous pouvez imiter des modèles. – leppie
Dans la toute dernière réponse à la question que vous avez liée à vous trouver des liens sur la façon dont ces choses sont faites dans le noyau Linux. Je pense que c'est une très bonne lecture pour ce type de stratégies. –
@Jens Gustedt Il semble intéressant et une excellente ressource, je vais devoir jeter un oeil. Merci – GriffinHeart