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

  FORUM HardWare.fr
  Programmation
  C++

  Pointeur de fonction en paramètre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pointeur de fonction en paramètre

n°847090
haazheel
Posté le 10-09-2004 à 16:28:13  profilanswer
 

Salut à tous,
 
c'est possible de passer un pointeur de fonction en paramètre d'un constructeur?
 
Ex:
 

Code :
  1. class A
  2. {
  3. private:
  4.    void toto(int i);
  5. public:
  6.    A();
  7. };
  8. class B
  9. {
  10. private:
  11.    void (*foo)(int i);
  12. public:
  13.    B(???) : foo(&???) {}
  14. };


 
Merci d'avance...

mood
Publicité
Posté le 10-09-2004 à 16:28:13  profilanswer
 

n°847102
theshockwa​ve
I work at a firm named Koslow
Posté le 10-09-2004 à 16:34:07  profilanswer
 

tu ne devrais plus trop avoir besoin de pointeurs de fonctions en c++ ... sinon, c'est tout à fait possible, mais apparemment, tu n'es pas trop familier avec la syntaxe
 
Edit :
ce serait plutôt quelque chose du style :

Code :
  1. class Foo {
  2. public:
  3.   Foo( void (*fct_ptr) () );
  4. }


 
à moins bien sur que j'aie mal saisi ce que tu voulais :jap:


Message édité par theshockwave le 10-09-2004 à 16:41:05
n°847207
Taz
bisounours-codeur
Posté le 10-09-2004 à 17:48:34  profilanswer
 

s'il en a besoin, il en a besoin. pour ton histoire de A/B, tu va vite être un peu ennuyé, les pointeurs de fonctions membres  ne sont pas des pointeurs de fonctions classiques et ne sont pas liés à this. il faut faire un compromis PMF / template la plus part du temps. donne un exemple d'utilisation de ce que tu veux faire ?

n°847368
haazheel
Posté le 10-09-2004 à 21:40:56  profilanswer
 

Taz a écrit :

s'il en a besoin, il en a besoin. pour ton histoire de A/B, tu va vite être un peu ennuyé, les pointeurs de fonctions membres  ne sont pas des pointeurs de fonctions classiques et ne sont pas liés à this. il faut faire un compromis PMF / template la plus part du temps. donne un exemple d'utilisation de ce que tu veux faire ?


 
PMF?? kesaco?
 
Je vais essayer d'expliquer ce que je veux faire:
 
j'ai une classe Video qui me permet de manipuler une vidéo (en gros comme le media player), et qui a une fonction Change_Video, appellant elle même 2 autres fonctions de VideoAffich, permettant de faire un reset de la vidéo affichée, et de charger la nouvelle vidéo.
 

Code :
  1. class TVideoAffich : public TForm
  2. {
  3. private:
  4. //...
  5. public:
  6. //...
  7.     void __fastcall Change_Video(const WideString & path_video);
  8. };


 
J'ai une classe Capture qui me permet de faire l'acquisition d'une vidéo depuis une caméra DV par exemple:
 

Code :
  1. class TVideoCapture : public TForm
  2. {
  3. private:
  4. //...
  5. public:
  6. //...
  7. };


 
J'ai une classe Indexation qui stocke dans une base de données des événements liés à cette vidéo, et qui utilise les classes précédentes.
 

Code :
  1. class TSaveData : public TForm
  2. {
  3. private:
  4. //...
  5.     TVideoAffich *Video;
  6.     TVideoCapture *Capture;
  7. public:
  8. //...
  9. };


 
J'ai une autre classe d'indexation des données, proposant un enregistrement plus sommaire des données, selon le choix de l'utilisateur, mais qui utilise aussi Video et Capture.
 
Je voudrais que la classe Capture puisse appeller la fonction Video::Change_Video sans être dépendante des classes d'indexation...
 
J'avais pensé à deux solutions: transmettre à Capture un pointeur vers l'objet Video, afin que Capture puisse appeller la fonction Change_Video, ou bien créer un pointeur de fonction vers Change_Video. Mais je ne sais pas si cette deuxième solution est viable. :??:

n°847380
Taz
bisounours-codeur
Posté le 10-09-2004 à 21:57:09  profilanswer
 

Pointer to Member Function
 
si ton utilisation est simple, passe un pointeur/référence à l'instance

n°847383
haazheel
Posté le 10-09-2004 à 21:59:24  profilanswer
 

Je pense effectivement que mon utilisation est simple...
L'appel à Change_Video depuis Capture permet juste à la vidéo d'afficher la nouvelle vidéo crée par Capture.
 
Mais j'ai pas bien compris... Je reste sur ma première solution, à savoir passer un pointeur de Video?

n°847405
Taz
bisounours-codeur
Posté le 10-09-2004 à 22:28:11  profilanswer
 

oui, c'est simple et fonctionnel.

n°847406
haazheel
Posté le 10-09-2004 à 22:31:22  profilanswer
 

OK, merci pour ta réponse... :)


Message édité par haazheel le 10-09-2004 à 22:32:04
n°1070596
NounouRs
Non parce que c pas mon pied !
Posté le 03-05-2005 à 15:57:42  profilanswer
 

J'ai un peu le meme type de question, je voudrais utiliser le constructeur set qui a besoin de 2 arguments : le type stocké et un comparateur sur ce type.
 
set <int, less<int> >  
 
quand c'est les int, ca reste facile, mais je compte utiliser un typedef donc un type un peu plus complexe.
 
set <truc, MA_fonction >
 
Mais je ne sais pas comment passer ma fonction... pointeur, pas pointeur ?
 
Et plus globalement, je trouve que ce n'est pas très "objet" de faire comme ca, est ce la bonne maniere d'utiliser set ?
 
edit:
bon j'ai un peu honte de ma premiere application dans ce cadre, car elle est un peu simple...
mais je vous met le code pour eclaircir ma question
 

typedef struct {int mg,trpg;} Mg_Trpg;
 
inline bool less_Mg_Trpg(Mg_Trpg a, Mg_Trpg b)
{
 if (a.mg <= b.mg) return true;
 else return false;
}
 
set<Mg_Trpg, less_Mg_Trpg> table;


Message édité par NounouRs le 03-05-2005 à 16:00:30
n°1070637
cesarr89
Posté le 03-05-2005 à 16:18:58  profilanswer
 

Et les foncteurs??

mood
Publicité
Posté le 03-05-2005 à 16:18:58  profilanswer
 

n°1070642
++fab
victime du syndrome IH
Posté le 03-05-2005 à 16:21:23  profilanswer
 

less est un foncteur qui fait intervenir l'operator<()
 
et qu'est-ce que tu fais avec ton typedef struct ? :o


Message édité par ++fab le 03-05-2005 à 16:26:59
n°1071313
NounouRs
Non parce que c pas mon pied !
Posté le 04-05-2005 à 09:43:38  profilanswer
 

je comprend pas vos remarques...
Qu'est ce que j'ai mal fait ?

n°1071319
Taz
bisounours-codeur
Posté le 04-05-2005 à 09:47:31  profilanswer
 

if (a.mg <= b.mg) return true;
 else return false;  
 
magnifique

n°1071330
NounouRs
Non parce que c pas mon pied !
Posté le 04-05-2005 à 09:52:46  profilanswer
 

oui, bon, allez      return  a.mg<=b.mg


Message édité par NounouRs le 04-05-2005 à 09:52:55
n°1071371
HelloWorld
Salut tout le monde!
Posté le 04-05-2005 à 10:21:16  profilanswer
 

Ton typedef sert à rien, struct tout court suffit.
Remplace less_Mg_Trpg par operator <, et tu pourras utiliser ta struct dans le set sans rien faire de particulier, car comme te l'a dit ++fab std::set utilise par défaut operator <, donc si tu le définit c'est bon.
Personnelement, je remplacerai ton <= en < dans ta fonction.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1072257
NounouRs
Non parce que c pas mon pied !
Posté le 04-05-2005 à 18:32:42  profilanswer
 

merci


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

  Pointeur de fonction en paramètre

 

Sujets relatifs
Délai avant fonction cache()fonction is_dir() qui bug
input submit, onclick, fonction ???[perl] Extraction de l'heure sur la fonction Localtime
taille d'image pour fonction PHPfonction perso foireuse
[VC++6] passage de paramètre à une MFCRendre récursive une fonction de listage.
Paramètre par defaut en javascriptPassage d'un pointeur en paramètre de fonction
Plus de sujets relatifs à : Pointeur de fonction en paramètre


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