Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5709 connectés 

 


Dernière réponse
Sujet : [C] Implémentation fonctions génériques
rufo

Pschitt a écrit a écrit :

En castant dans la fonction de comparaison alors ?  




 
oui


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
rufo

Pschitt a écrit a écrit :

En castant dans la fonction de comparaison alors ?  




 
oui

Pschitt En castant dans la fonction de comparaison alors ?
rufo un pointeur de type void?
Pschitt Et de façon dégueulasse, on fait comment ?
Il n'y vraiment aucune astuce :-(
Même en abusant du préprocesseur
tgrx La solution c'est le C++ avec les templates.
 
En C tu ne peux pas le faire proprement :sweat:
Pschitt Mon pb n'est la fonction de comparaison mais plutôt comment automatiser le cast des nouveaux objets pointés par le tableau.
youdontcare comme quicksort, tu lui passes un pointeur sur fonction (la fonction en question faisant la comparaison entre deux objets).
Pschitt 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 )
 
            {...
            }

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)