Aller au contenu

Fonction en paramètre


mogwai93

Messages recommandés

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

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

  • 3 semaines après...
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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...