Pointeur de fonction en paramètre - C++ - Programmation
Marsh Posté le 10-09-2004 à 16:34:07
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 :
|
à moins bien sur que j'aie mal saisi ce que tu voulais
Marsh Posté le 10-09-2004 à 17:48:34
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 ?
Marsh Posté le 10-09-2004 à 21:40:56
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 :
|
J'ai une classe Capture qui me permet de faire l'acquisition d'une vidéo depuis une caméra DV par exemple:
Code :
|
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 :
|
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.
Marsh Posté le 10-09-2004 à 21:57:09
Pointer to Member Function
si ton utilisation est simple, passe un pointeur/référence à l'instance
Marsh Posté le 10-09-2004 à 21:59:24
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?
Marsh Posté le 10-09-2004 à 22:31:22
OK, merci pour ta réponse...
Marsh Posté le 03-05-2005 à 15:57:42
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; |
Marsh Posté le 03-05-2005 à 16:21:23
less est un foncteur qui fait intervenir l'operator<()
et qu'est-ce que tu fais avec ton typedef struct ?
Marsh Posté le 04-05-2005 à 09:43:38
je comprend pas vos remarques...
Qu'est ce que j'ai mal fait ?
Marsh Posté le 04-05-2005 à 09:47:31
if (a.mg <= b.mg) return true;
else return false;
magnifique
Marsh Posté le 04-05-2005 à 09:52:46
oui, bon, allez return a.mg<=b.mg
Marsh Posté le 04-05-2005 à 10:21:16
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.
Marsh Posté le 10-09-2004 à 16:28:13
Salut à tous,
c'est possible de passer un pointeur de fonction en paramètre d'un constructeur?
Ex:
Merci d'avance...