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

  FORUM HardWare.fr
  Programmation
  C++

  pointeur de fonction ou fonction ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pointeur de fonction ou fonction ?

n°208138
picshertho
Posté le 03-09-2002 à 17:34:26  profilanswer
 

salut, j'ai une question
dans quel cas il est préférable d'utiliser un pointeur de fonction pour appeler une fonction et dans quel cas ca n'en vaut pas la peine ?  
merci

mood
Publicité
Posté le 03-09-2002 à 17:34:26  profilanswer
 

n°208150
LetoII
Le dormeur doit se réveiller
Posté le 03-09-2002 à 17:48:17  profilanswer
 

je comprend pas bien ta question.


---------------
Le Tyran
n°208164
airbag
There's no life before coffee
Posté le 03-09-2002 à 18:09:50  profilanswer
 

J'ai utilisé les pointeurs de fonctions une fois, quand j'ai réalisé un interprète de commandes sous linux.
C'est utile pour stocker les fonctions dans des tableaux. Comme ça à partir d'un nom de commande je peut retouver facilement quelle fonction appeler. La maintenance (ajout et suppression de fonctionnalités) est hyper simple : il suffit de rajouter une cellule au tableau de fonctions.

n°208165
darthguy
Posté le 03-09-2002 à 18:11:19  profilanswer
 

Tu devrais preciser un peu ta question.
 
D'ordre general, on utilise des pointeurs de fonction pour des "callbacks". Pour des fonctions comme qsort, par exemple.  
 
Sinon, si t'es en C++ (donc objet), c'est moins necessaire vu que tu peux surcharger les methodes de tes classes.
 
Mais je sais pas si je reponds rellement a ta question.

n°208172
picshertho
Posté le 03-09-2002 à 18:38:12  profilanswer
 

plus ou moins...
en fait je veux savoir dans quels intérêts je peux me servir d'un pointeur de fonction au lieu d'appeler une fonction par son nom (lassiquement) je vois pas ce que je peux dire de plus

n°208176
LetoII
Le dormeur doit se réveiller
Posté le 03-09-2002 à 18:43:10  profilanswer
 

picshertho a écrit a écrit :

plus ou moins...
en fait je veux savoir dans quels intérêts je peux me servir d'un pointeur de fonction au lieu d'appeler une fonction par son nom (lassiquement) je vois pas ce que je peux dire de plus




 
 
Ben typiquement quand tu connais pas le nom de la fonction à l'avence. Soit tu passe un ponteur à une fonction pour qu'elle en appelle une autre. Soit tu choisie dans un tableau la bonne à lancer. C les deux exemple les plus courants


---------------
Le Tyran
n°208183
verdoux
And I'm still waiting
Posté le 03-09-2002 à 18:55:16  profilanswer
 

Comme par exemple lors du chargement "manuel" de DLL, voir http://forum.hardware.fr/forum2.ph [...] h=&subcat=

n°208366
Musaran
Cerveaulté
Posté le 04-09-2002 à 03:44:08  profilanswer
 

Quand tu as besoin de changer à l'exécution la fonction appelée par ton code.
Ceci:

Code :
  1. n= ...//Quand il faut changer
  2. ...
  3. switch (n){
  4. case 1: fonc1(); break;
  5. case 2: fonc2(); break;
  6. case 2: fonc3(); break;
  7. case 4: fonc4(); break;
  8. }

peut être remplacé par cela:

Code :
  1. pfonc= ...//Quand il faut changer
  2. ...
  3. pfonc();


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°208378
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 04-09-2002 à 08:39:20  profilanswer
 

Musaran a écrit a écrit :

En C il est facile de se flinguer le pied. Le C++ rends cela plus dur, mais quand on y arrive, c'est la jambe entière qui part.  
(pensée de Bjarne Stroustrup)




 :jap:  [:xp1700]


---------------
J'ai un string dans l'array (Paris Hilton)
n°208410
BENB
100% Lux.
Posté le 04-09-2002 à 10:19:02  profilanswer
 

Sauf chargement de DLL, jamais de pointeurs de fonction en C++
 
Utilise des foncteurs à la place...
 
Sinon en C oui, pour des callback, ou pour eviter des switch trop importants (tableaux de pointeurs)

mood
Publicité
Posté le 04-09-2002 à 10:19:02  profilanswer
 

n°208430
godbout
Génial.
Posté le 04-09-2002 à 11:16:57  profilanswer
 

Verdoux a écrit a écrit :

Comme par exemple lors du chargement "manuel" de DLL, voir http://forum.hardware.fr/forum2.ph [...] h=&subcat=




:jap:
 
Enfin c'est pas le topic le plus interessant qui porte sur le sujet.
Mais quand tu charges une dll dynamiquement (runtime), effectivement tu as besoin des pointeurs de fonction.


Message édité par godbout le 04-09-2002 à 11:38:58

---------------
Super.
n°209030
Musaran
Cerveaulté
Posté le 05-09-2002 à 03:32:09  profilanswer
 

Harkonnen a écrit a écrit :

 :jap:  [:xp1700]


Je sais pas pourquoi elle m'a bien plu celle-là :D.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°209136
Toxin
Carpe ★★ Vitam
Posté le 05-09-2002 à 11:20:28  profilanswer
 

BENB a écrit a écrit :

Sauf chargement de DLL, jamais de pointeurs de fonction en C++
 
Utilise des foncteurs à la place...
 
Sinon en C oui, pour des callback, ou pour eviter des switch trop importants (tableaux de pointeurs)




 
C'est quoi un foncteur ?
D'autre part quelqu'un aurait-il la gentillesse de me rappeler la syntaxte de définition d'un pointeur de fonction membre d'une classe ?


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Ma chaîne YT
n°209148
LetoII
Le dormeur doit se réveiller
Posté le 05-09-2002 à 11:26:15  profilanswer
 

Toxin a écrit a écrit :

 
 
C'est quoi un foncteur ?
D'autre part quelqu'un aurait-il la gentillesse de me rappeler la syntaxte de définition d'un pointeur de fonction membre d'une classe ?




 
typeDeRetour (Class::*)(args);
 
Un truc comme ça, je vérifie.


---------------
Le Tyran
n°209159
verdoux
And I'm still waiting
Posté le 05-09-2002 à 11:31:46  profilanswer
 

letoII a écrit a écrit :

 
 
typeDeRetour (Class::*)(args);
 
Un truc comme ça, je vérifie.




Non c'est une classe qui a un opérateur (), c'est à dire dont les instances sont appelables.

n°209167
LetoII
Le dormeur doit se réveiller
Posté le 05-09-2002 à 11:40:13  profilanswer
 

Verdoux a écrit a écrit :

 
Non c'est une classe qui a un opérateur (), c'est à dire dont les instances sont appelables.




 
non c bien ça
 

Code :
  1. class A
  2. {
  3.   void f();
  4. }
  5. void (A::*p)() = &(A::f); //pointeur vers la méthode f


Message édité par LetoII le 05-09-2002 à 11:40:30

---------------
Le Tyran
n°209172
Toxin
Carpe ★★ Vitam
Posté le 05-09-2002 à 11:42:58  profilanswer
 

Merci et pour l'autre question ?


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Ma chaîne YT
n°209179
verdoux
And I'm still waiting
Posté le 05-09-2002 à 11:48:57  profilanswer
 

letoII a écrit a écrit :

 
 
non c bien ça
 




http://casteyde.christian.free.fr/ [...] x5200.html


Message édité par verdoux le 05-09-2002 à 11:49:31
n°209184
LetoII
Le dormeur doit se réveiller
Posté le 05-09-2002 à 11:52:09  profilanswer
 


 
Oaui, ça c un foncteur effectivement. E alors? je parlais des pointeur sur fonction membre moi, mais c pas grave :D
D'ailleur l'utilité des foncteurs ne me semble pas être le meêm que celle des pointeurs sur fonction membre masi bon pas assez pratiqué pour juger.


---------------
Le Tyran
n°209367
BENB
100% Lux.
Posté le 05-09-2002 à 16:52:24  profilanswer
 

Toxin a écrit a écrit :

Merci et pour l'autre question ?




Un foncteur est une classe pour laquelle l'operateur () est defini, une instance de cette classe peut donc etre utilisée comme une fonction, et un pointeur sur cette classe commeun pointeur de fonction.  
 
L'avantages est que comme on passe une classe on peut y ajouter des membres :
 
par exemple
 

Code :
  1. class polynome
  2. {
  3. public:
  4.   double a,b,c; 
  5.   double operator ()(double x);
  6.   {
  7.       return a*x*x+b*x+c;
  8.   }
  9. }


 

n°209448
LeGreg
Posté le 05-09-2002 à 18:19:38  profilanswer
 

en quoi un foncteur peut-il remplacer un pointeur de fonction?
tu veux parler des applications generiques style <algorithm> ou c'est une erreur de passer un pointeur de fonction?
 
sinon dans les autres cas: pointeur de fonction = fonction dont le corps est non défini à la compilation mais défini à l'execution, foncteur = objet/fonction connu à la compilation.
 
pour moi ca ne se recoupe pas trop mais peut-etre que je me trompe.
 
LeGreg

n°209823
Toxin
Carpe ★★ Vitam
Posté le 06-09-2002 à 10:53:12  profilanswer
 

Personnellement j'ai par le passé créé un automate à état et la solution la plus élégante passait par les pointeurs de fonction membre.


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Ma chaîne YT
n°209905
BENB
100% Lux.
Posté le 06-09-2002 à 13:34:31  profilanswer
 

legreg a écrit a écrit :

en quoi un foncteur peut-il remplacer un pointeur de fonction?
tu veux parler des applications generiques style <algorithm> ou c'est une erreur de passer un pointeur de fonction?
 
sinon dans les autres cas: pointeur de fonction = fonction dont le corps est non défini à la compilation mais défini à l'execution, foncteur = objet/fonction connu à la compilation.
 
pour moi ca ne se recoupe pas trop mais peut-etre que je me trompe.
 
LeGreg




Un pointeur de fonction est une forme de foncteur...
 
Si tu ne veux pas que le coprs du foncteur soit defini à la compilation tu peux utiliser des fonctions virtuelles ou des templates...
 

n°209914
LeGreg
Posté le 06-09-2002 à 13:54:36  profilanswer
 

Citation :

Un pointeur de fonction est une forme de foncteur...


 
Oui bien sur, sauf que pour qu'on puisse s'entendre j'ai repris ta definition de "foncteur" (deux posts plus haut).
 

Citation :

Si tu ne veux pas que le coprs du foncteur soit defini à la compilation tu peux utiliser des fonctions virtuelles ou des templates...


 
ok pour les fonctions virtuelles puisque ca utilise en gros un tableau de pointeurs pour savoir quelle fonction appeler au runtime et c'est plus propre a faire en orienté objet (en java c'est le seul moyen..).
Pas d'accord pour les templates qui sont bien définis au compilation time (et je ne te parle pas des templates avec fonctions virtuelles qui melangent deux notions differentes).
 
LeGreg

n°209918
BENB
100% Lux.
Posté le 06-09-2002 à 14:04:45  profilanswer
 

legreg a écrit a écrit :

Citation :

Un pointeur de fonction est une forme de foncteur...


 
Oui bien sur, sauf que pour qu'on puisse s'entendre j'ai repris ta definition de "foncteur" (deux posts plus haut).
 

Citation :

Si tu ne veux pas que le coprs du foncteur soit defini à la compilation tu peux utiliser des fonctions virtuelles ou des templates...


 
ok pour les fonctions virtuelles puisque ca utilise en gros un tableau de pointeurs pour savoir quelle fonction appeler au runtime et c'est plus propre a faire en orienté objet (en java c'est le seul moyen..).
Pas d'accord pour les templates qui sont bien définis au compilation time (et je ne te parle pas des templates avec fonctions virtuelles qui melangent deux notions differentes).
 
LeGreg




 
Le foncteur est souvent utilisé par des fct templates, et l'utilisation d'un pointeur de fct dans ce contexte est souvent possible...
 
Je suis d'accord pour le template c'est n'est pas a proprement parler du "run-time". Je pensais à une fct call-back comme dans le cas d'un solveur, à l'écriture du solveur tu ne sais pas quelle fonction devra etre appellé, en C tu utilisera un pointeur de fonction. En C++ la methode C marche toujours, mais tu peux en plus jouer sur template/foncteur ou foncteur virtuel... Je prefere la premiere forme(template/foncteur)
 
Generalement ces solveurs sont compilées et livrés dans desbibliotheques, le template retarde le moment de la compilation, pour celui qui ecrit le solveur tout se passe comme si c'était resolu en "run-time"...


Message édité par BENB le 06-09-2002 à 14:07:42
n°209921
LeGreg
Posté le 06-09-2002 à 14:13:54  profilanswer
 

oui je crois qu'on est d'accord :)
en C++, grace a la programmation generique
tu reduis le champ d'application du pointeur
de fonction (comparaison de l'efficacité de la fonction
qsort de cstdlib, et de la fonction std::sort de <algorithm> ),
ceci dit c'est une lacune (comblée)
du C, et le pointeur de fonction a encore
son utilité en C++ (meme déguisé sous forme
de methode virtuelle)
 
A+
LeGreg

n°209996
BENB
100% Lux.
Posté le 06-09-2002 à 15:48:04  profilanswer
 

legreg a écrit a écrit :

oui je crois qu'on est d'accord :)
en C++, grace a la programmation generique
tu reduis le champ d'application du pointeur
de fonction (comparaison de l'efficacité de la fonction
qsort de cstdlib, et de la fonction std::sort de <algorithm> ),
ceci dit c'est une lacune (comblée)
du C, et le pointeur de fonction a encore
son utilité en C++ (meme déguisé sous forme
de methode virtuelle)
 
A+
LeGreg
 




 
Mon discours était simplement de dire que le C++ apportait des techniques plus interessantes que le pointeur de fonction. Et que dans une conception purement C++ il était (a mon avis) préférable de ne pas utiliser de pointeurs de Fonctions...
 
Les contres-exemples ? ceux que je cites sont mauvais puisqu'il sont en fait des cas de compatibilité avec le C :
-Chargement explicite de DLL
-Fct call-back

n°210248
Musaran
Cerveaulté
Posté le 07-09-2002 à 02:21:00  profilanswer
 

Les pointeurs de fonction sont puissants mais dangereux.
 
L'utilisation d'un tel pointeur non/mal initialisé engendre l'exécution de n'importe quoi, ce qui est beaucoup plus grave que le classique lire/écrire n'importe où.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  pointeur de fonction ou fonction ?

 

Sujets relatifs
copier un document, et filtrer en fonction d'un critère[PHP] aide avec une fonction de rajout de dates / string
Hébergeur de PHP gratuit avec fonction mailComment replacer le pointeur lecture en position de debut ????
Fonction qui récupère la date de dernière modif de la base ?Passage d'un pointeur en paramètre de fonction
[C++] Pointeur de fonction sur membre d'une classePointeur de fonction membre en C++ ??
[C++] type pointeur de fonction[ c++ ] pointeur sur fonction
Plus de sujets relatifs à : pointeur de fonction ou fonction ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR