mogwai93 Posté(e) le 23 juillet 2004 Partager Posté(e) le 23 juillet 2004 J'ai trouvé ça en pascal : TYPE T_Pt_O_Element = ^O_Element; O_Element = OBJECT Pt_Suite : T_Pt_O_Element; CONSTRUCTOR Initialise; END; T_Traite = PROCEDURE (P : T_Pt_O_Element); O_Liste = OBJECT Pt_Debut, Pt_Fin : T_Pt_O_Element; CONSTRUCTOR Initialise; PROCEDURE Ajoute_Fin(P_Pt_O_Element : T_Pt_O_Element); PROCEDURE Balaye(P_Traite : T_Traite); END; CONSTRUCTOR O_Element.Initialise; BEGIN Pt_Suite := NIL; END; CONSTRUCTOR O_Liste.Initialise; BEGIN Pt_Debut := NIL; END; PROCEDURE O_Liste.Ajoute_Fin(P_Pt_O_Element : T_Pt_O_Element); BEGIN IF Pt_Debut = NIL THEN Pt_Debut := P_Pt_O_Element ELSE Pt_Fin^.Pt_Suite := P_Pt_O_Element; Pt_Fin := P_Pt_O_Element; END; PROCEDURE O_Liste.Balaye(P_Traite : T_Traite); VAR L_Pt_O_Element : T_Pt_O_Element; BEGIN L_Pt_O_Element := Pt_Debut; WHILE L_Pt_O_Element <> NIL DO BEGIN P_Traite(L_Pt_O_Element); L_Pt_O_Element := L_Pt_O_Element^.Pt_Suite; END; END; TYPE O_Liste_Fenetres = OBJECT(O_Liste) CONSTRUCTOR Initialise; PROCEDURE Dessine; PROCEDURE Teste_Sous_Souris; PROCEDURE Traite_Souris_Clavier; END; .... (* -- Liste de fenetres -- *) CONSTRUCTOR O_Liste_Fenetres.Initialise; BEGIN O_Liste.Initialise; END; {$F+} PROCEDURE Dessine_Une_Fenetre(P_Pt_O_Fenetre : T_Pt_O_Element); {$F-} BEGIN WITH T_Pt_O_Fenetre(P_Pt_O_Fenetre)^ DO BEGIN Dessine; END; END; PROCEDURE O_Liste_Fenetres.Dessine; BEGIN Balaye(Dessine_Une_Fenetre); END; ..... Le code fonctionne en pascal. ==> Gestion d'une liste d'objets Je voudrais savoir si on peut faire la même chose en C/C++ cad si on peut passer une fonction en paramètre en C/C++ ? Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
volk Posté(e) le 23 juillet 2004 Partager Posté(e) le 23 juillet 2004 il me semble que pour passer une fonction en paramètre en C, il faut faire un truc comme ça : int f1(int i){ } int f2(int i){ } int test(int(mafonction)(int)){ int res = mafonction(2); return res; } void main(){ int f1res = test(f1); int f2res = test(f2); } en gros tu met le prototype de ta fonction ici renvoi un int, prend un int en paramètre : int(mafonction)(int) à partir de typeretour(nomfonction)(type(s) paramètre(s)) Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 10 août 2004 Partager Posté(e) le 10 août 2004 Le HS de login consacre une page sur les fonctions en paramètres. Sinon, ce n'est pas très compliqué. C'est une des choses basique qu'on apprend avec un quiksort. Je pense qu'un programmateur comme toi ne devrais pas avoir trop de mal avec ce genre de trucs. Lien vers le commentaire Partager sur d’autres sites More sharing options...
fabricer Posté(e) le 11 août 2004 Partager Posté(e) le 11 août 2004 Voici une fonction : int foo( int prm1, char *prm2 ) ; et le pointeur sur la fonction (déclaration) : int ( *p_foo ) ( int, char * ) = &foo ; ensuite tu manipule ton pointeur p_foo directement, pour l'appeler par example : ( *p_foo ) ( 10, szbuffer ) ; Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 11 août 2004 Auteur Partager Posté(e) le 11 août 2004 Voici une fonction :int foo( int prm1, char *prm2 ) ; et le pointeur sur la fonction (déclaration) : int ( *p_foo ) ( int, char * ) = &foo ; ensuite tu manipule ton pointeur p_foo directement, pour l'appeler par example : ( *p_foo ) ( 10, szbuffer ) ; oui, mais tu aurais vu mon exemple en pascal, la fonction passée en paramètre est de type void et pas int. En pascal, je sais comment faire, mais ayant un programme utilisant le passage de fonction en paramètre, je voudrais passer le code en C/C++, d'où ma question... Lien vers le commentaire Partager sur d’autres sites More sharing options...
fabricer Posté(e) le 11 août 2004 Partager Posté(e) le 11 août 2004 oui, mais tu aurais vu mon exemple en pascal,la fonction passée en paramètre est de type void et pas int. En pascal, je sais comment faire, mais ayant un programme utilisant le passage de fonction en paramètre, je voudrais passer le code en C/C++, d'où ma question... Pour le type void ce n'est pas un problème, il suffit de remplacer int par void : void foo( int prm1, char *prm2 ) ; void ( *p_foo ) ( int, char * ) = &foo ; Je suis pas sûr d'avoir bien compris ton problème. Je vais regarder ton source Pascal. ----------------------------- EDIT Je viens de regarder ton source, je ne vois aucun pointeur sur fonction, mais juste un pointeur sur un Objet de la classe O_Element. Mais bon je me souvient plus des mots clés en Pascal. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.