[C] Implémentation fonctions génériques

Implémentation fonctions génériques [C] - Programmation

Marsh Posté le 11-11-2001 à 19:44:16    

J'ai une fonction de recherche dicho. que j'aimerais coder de façon générique.  
 
Implantation\Structure :
 
    - Objet :
 
      typedef struct {
 
 unsigned int TypeObjet;   /* Entier définissant*/      
        char nom[30];             /* le type d'objet  */          
 int idNmElem;  
 
        }OBJ_1;
 
    - Liste dans un tableau trié :
 
      typedef struct {
 
 void * tabRechDicho[LGMAX];
 int fin;      
 
 }LISTE_RECH;
 
Proto fonction de recherche :
 
INFO_RECH_D * RechDicho (
 
 LISTE_RECH * lr,
 void * Obj,
 int typeObj,
        int (* Comparer) (void *,void *) /* Fonction  */
            /* comparaison */  
 )
 
Comment éviter le switch case pour caster chaque nouveau type d'objet dans le corps de cette fonction :
     
     if(compare( (type *)tabRechDicho[n].nom , Obj )
 
            {...
            }

Reply

Marsh Posté le 11-11-2001 à 19:44:16   

Reply

Marsh Posté le 11-11-2001 à 19:51:55    

comme quicksort, tu lui passes un pointeur sur fonction (la fonction en question faisant la comparaison entre deux objets).

Reply

Marsh Posté le 12-11-2001 à 17:40:59    

Mon pb n'est la fonction de comparaison mais plutôt comment automatiser le cast des nouveaux objets pointés par le tableau.

Reply

Marsh Posté le 12-11-2001 à 17:52:23    

La solution c'est le C++ avec les templates.
 
En C tu ne peux pas le faire proprement :sweat:

Reply

Marsh Posté le 12-11-2001 à 21:09:34    

Et de façon dégueulasse, on fait comment ?
Il n'y vraiment aucune astuce :-(
Même en abusant du préprocesseur

Reply

Marsh Posté le 12-11-2001 à 21:56:20    

un pointeur de type void?

Reply

Marsh Posté le 13-11-2001 à 20:59:35    

En castant dans la fonction de comparaison alors ?

Reply

Marsh Posté le 14-11-2001 à 21:36:23    

Pschitt a écrit a écrit :

En castant dans la fonction de comparaison alors ?  




 
oui

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed