 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Bernard Bergeron Guest
|
Posted: Fri Jun 18, 2004 1:04 am Post subject: définition de fonction |
|
|
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))
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Fri Jun 18, 2004 2:54 am Post subject: Re: définition de fonction |
|
|
On Fri, 18 Jun 2004 03:04:09 +0200, "Bernard Bergeron"
<bergeron.trash (AT) free (DOT) fr>:
| Quote: | 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 ?
| Quote: | 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
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Fri Jun 18, 2004 2:56 am Post subject: Re: définition de fonction |
|
|
[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"
<bergeron.trash (AT) free (DOT) fr>:
| Quote: | 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 ?
| Quote: | 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
|
|
| Back to top |
|
 |
Bernard Bergeron Guest
|
Posted: Fri Jun 18, 2004 3:30 am Post subject: Re: définition de fonction |
|
|
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" <gramster (AT) gramster (DOT) com> a écrit dans le message de
news:8cm4d0t34voo4ifp7u1g90d08ijk0quj4p (AT) 4ax (DOT) com...
| Quote: | [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"
[email]bergeron.trash (AT) free (DOT) fr[/email]>:
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
|
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Fri Jun 18, 2004 4:17 am Post subject: Re: définition de fonction |
|
|
On Fri, 18 Jun 2004 05:30:07 +0200, "Bernard Bergeron"
<bergeron.trash (AT) free (DOT) fr>:
| Quote: | 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
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Fri Jun 18, 2004 4:23 am Post subject: Re: définition de fonction |
|
|
Dans news:40d260ad$0$287$626a14ce (AT) news (DOT) free.fr, Bernard
Bergeron <bergeron.trash (AT) free (DOT) fr> a écrit :
| Quote: | 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...
| Quote: | "Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message
de news:8cm4d0t34voo4ifp7u1g90d08ijk0quj4p (AT) 4ax (DOT) com...
On Fri, 18 Jun 2004 03:04:09 +0200, "Bernard Bergeron"
[email]bergeron.trash (AT) free (DOT) fr[/email]>:
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 [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
Jean-Noël Mégoz Guest
|
Posted: Fri Jun 18, 2004 8:32 am Post subject: Re: définition de fonction |
|
|
"Michel Michaud" <mm (AT) gdzid (DOT) com> a écrit dans le message de
news:T6uAc.50598$7H1.1708439 (AT) news20 (DOT) bellglobal.com...
| Quote: |
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à ? ))
|
|
| Back to top |
|
 |
Bernard Bergeron Guest
|
Posted: Fri Jun 18, 2004 12:40 pm Post subject: Re: définition de fonction |
|
|
| Quote: | 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?
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Fri Jun 18, 2004 2:35 pm Post subject: Re: définition de fonction |
|
|
Dans news:40d2e161$0$286$626a14ce (AT) news (DOT) free.fr, Bernard
Bergeron <bergeron.trash (AT) free (DOT) fr> a écrit :
| Quote: | 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 [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|