OVH Cloud OVH Cloud

définition de fonction

8 réponses
Avatar
Bernard Bergeron
comment définir f qui à un élément de type t1 associe une fonction qui à
- une fonction qui associe à t2 -> t3

associe

- une contion qui a t4 associe t5


... histoire que je comprenne la logique...

merci!

en gros :
f t1 -> ((t2->t3)->(t4->t5))

8 réponses

Avatar
Fabien LE LEZ
On Fri, 18 Jun 2004 03:04:09 +0200, "Bernard Bergeron"
:

comment définir f qui à un élément de type t1 associe une fonction qui à
- une fonction qui associe à t2 -> t3


Je suppose que tu parles d'une fonction qui a un seul argument, de
type t2, et qui renvoie un t3 ?

associe

- une contion qui a t4 associe t5


A priori, ça doit donner un truc comme ça :

typedef t3 (*fct_t2_t3) (t2);
typedef t5 (*fct_t4_t5) (t4);

fct_t4_t5 f (fct_t2_t3)
{
}

Note : il est possible de faire ça sans typedef, mais c'est vite
illisible.

Note bis : il est assez peu courant en C++ d'utiliser les pointeurs de
fonctions ; on préférera les foncteurs.


--
schtroumpf schtroumpf

Avatar
Fabien LE LEZ
[Note : message précédent annulé car je ne sais pas faire un
Supersedes]

On Fri, 18 Jun 2004 03:04:09 +0200, "Bernard Bergeron"
:

comment définir f qui à un élément de type t1 associe une fonction qui à
- une fonction qui associe à t2 -> t3


Je suppose que tu parles d'une fonction qui a un seul argument, de
type t2, et qui renvoie un t3 ?

associe

- une contion qui a t4 associe t5


A priori, ça doit donner un truc comme ça :

typedef t3 (*fct_t2_t3) (t2);
typedef t5 (*fct_t4_t5) (t4);
typedef fct_t4_t5 (*fct_t) (fct_t2_t3);

fct_t f (t1)
{
}

Note : il est possible de faire ça sans typedef, mais c'est vite
illisible.

Note bis : il est assez peu courant en C++ d'utiliser les pointeurs de
fonctions ; on préférera les foncteurs.


--
schtroumpf schtroumpf

Avatar
Bernard Bergeron
merci, mais tu pourrais me la refaire en une seule fois?
.. aucune utilité bien sûr sinon de comprendre l'ordre d'écriture...


"Fabien LE LEZ" a écrit dans le message de
news:
[Note : message précédent annulé car je ne sais pas faire un
Supersedes]

On Fri, 18 Jun 2004 03:04:09 +0200, "Bernard Bergeron"
:

comment définir f qui à un élément de type t1 associe une fonction qui à
- une fonction qui associe à t2 -> t3


Je suppose que tu parles d'une fonction qui a un seul argument, de
type t2, et qui renvoie un t3 ?

associe

- une contion qui a t4 associe t5


A priori, ça doit donner un truc comme ça :

typedef t3 (*fct_t2_t3) (t2);
typedef t5 (*fct_t4_t5) (t4);
typedef fct_t4_t5 (*fct_t) (fct_t2_t3);

fct_t f (t1)
{
}

Note : il est possible de faire ça sans typedef, mais c'est vite
illisible.

Note bis : il est assez peu courant en C++ d'utiliser les pointeurs de
fonctions ; on préférera les foncteurs.


--
schtroumpf schtroumpf



Avatar
Fabien LE LEZ
On Fri, 18 Jun 2004 05:30:07 +0200, "Bernard Bergeron"
:

merci, mais tu pourrais me la refaire en une seule fois?


Non, je ne me hasarderais pas à ce genre d'obfuscation.
En passant, merci d'apprendre à poster sur Usenet -- cf
<http://www.giromini.org/usenet-fr/repondre.html>.


--
schtroumpf schtroumpf

Avatar
Michel Michaud
Dans news:40d260ad$0$287$, Bernard
merci, mais tu pourrais me la refaire en une seule fois?
.. aucune utilité bien sûr sinon de comprendre l'ordre
d'écriture...


Tu en demandes beaucoup et tu ne fais pas beaucoup d'effort,
moi en tout cas, je n'avais rien compris de ta question...
Il faudrait que tu apprennnes aussi à répondre à la bonne
place, c'est bien plus simple que les déclarations C...

"Fabien LE LEZ" a écrit dans le message
de news:
On Fri, 18 Jun 2004 03:04:09 +0200, "Bernard Bergeron"
:

comment définir f qui à un élément de type t1 associe une
fonction qui à - une fonction qui associe à t2 -> t3


Je suppose que tu parles d'une fonction qui a un seul
argument, de
type t2, et qui renvoie un t3 ?

associe

- une contion qui a t4 associe t5


A priori, ça doit donner un truc comme ça :

typedef t3 (*fct_t2_t3) (t2);
typedef t5 (*fct_t4_t5) (t4);
typedef fct_t4_t5 (*fct_t) (fct_t2_t3);

fct_t f (t1)
{
}

Note : il est possible de faire ça sans typedef, mais c'est
vite illisible.



Je ne trouve pas que c'est lisible avec les typedef non plus :-)

Ceci dit, pour faire plaisir à Bernard, si ta réponse est
correcte, on peut aussi écrire :

t5 (*(*f(t1))(t3 (*)(t2)))(t4)
{}

Qu'on peut lire :

- f prend un paramètre de type t1
f(t1)
- elle renvoie quelque chose qu'on peut déréférencer
et alors on a une fonction à laquelle on peut passer un
paramètre
(*f(t1))(?)
- ce paramètre est un pointeur sur une fonction acceptant
un t2 et renvoyant un t3 i.e. t3 (*)(t2) donc
(*f(t1))(t3 (*)(t2))
- cet appel de fonction renvoie quelque chose qu'on peut
déréférencer et alors on a une fonction à laquelle on peut
passer un paramètre
(*(*f(t1))(t3 (*)(t2)))(?)
- ce paramètre est un t4 et la fonction renvoie un t5 donc
t5 (*(*f(t1))(t3 (*)(t2)))(t4)

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/



Avatar
Jean-Noël Mégoz
"Michel Michaud" a écrit dans le message de
news:T6uAc.50598$

Je ne trouve pas que c'est lisible avec les typedef non plus :-)

Ceci dit, pour faire plaisir à Bernard, si ta réponse est
correcte, on peut aussi écrire :

t5 (*(*f(t1))(t3 (*)(t2)))(t4)
{}



C'est vrai que comme ça, c'est limpide !
Y'en a pas un qui parlait de supprimer le parenthèsage, dans une autre
conversation, déjà ? ;)))

Avatar
Bernard Bergeron
Je ne trouve pas que c'est lisible avec les typedef non plus :-)

Ceci dit, pour faire plaisir à Bernard, si ta réponse est
correcte, on peut aussi écrire :

t5 (*(*f(t1))(t3 (*)(t2)))(t4)
{}



C'est vrai que comme ça, c'est limpide !
Y'en a pas un qui parlait de supprimer le parenthèsage, dans une autre
conversation, déjà ? ;)))


merci,
on est obligé de passer une fonction par un pointeur?


Avatar
Michel Michaud
Dans news:40d2e161$0$286$, Bernard
t5 (*(*f(t1))(t3 (*)(t2)))(t4)
{}
merci,


on est obligé de passer une fonction par un pointeur?


Oui, mais on n'est pas obligé de l'écrire explicitement. Par
exemple (j'ai mis des noms aux paramètres) :

t5 (*(*f(t1 prm1))(t3 prmFctPrenantT2DonnantT3(t2 prm2)))(t4 prm4)

Ça n'ajoute pas grand chose...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/