passer une méthode en paramètre

passer une méthode en paramètre - C++ - Programmation

Marsh Posté le 27-02-2006 à 17:58:07    

salut,
 
dans la méthode de classe sur laquelle je bosse actuellement, j'ai besoin de passer en paramètre une fonction. Jusque là pas de problème. Cependant, lorsque j'appelle cette fonction, et que je lui donne en paramètre une méthode d'un objet, le compilateur n'aime pas, et me dit "cannot convert parameter x from void (float temp) to void(_cdlkekchose)(float temp). Je suppose que cela vient du fait qu'il ne s'agit pas d'une fonction normale mais d'une méthode de classe. Que dois-je rajouter dans la déclaration du paramètre, pour q'uil accèpte non seulement les fonctions basiques, mais également les méthodes de classes (et pourquoi pas de template tant qu'à faire) ?  
 
Merci


Message édité par Vel-Ryphon le 27-02-2006 à 18:25:51
Reply

Marsh Posté le 27-02-2006 à 17:58:07   

Reply

Marsh Posté le 27-02-2006 à 18:00:20    

fait une petite recherche sur le forum

Reply

Marsh Posté le 27-02-2006 à 20:06:21    

désolé je ne trouve rien qui règle mon problème. Quelqu'un peut m'aider?


Message édité par Vel-Ryphon le 27-02-2006 à 20:06:45
Reply

Marsh Posté le 02-03-2006 à 09:40:26    

toujours personne ??

Reply

Marsh Posté le 09-03-2006 à 15:14:26    

j'ai posé une colle ou quoi ? lol
 
bon quelques informations : je compile avec Visual C++ 6.
De plus, pour rappeler le problème, j'ai une classe A, qui a une méthode meth0 pour laquelle je définis un paramètre de type pointeur de fonction :
class A
{
...
public :
      void meth0((void*)(function_name)(float param1));
};
 
j'ai également une classe B avec une méthode classique meth1(float param1)
 
lorsque je compile :
 
A->meth0(B->meth1);
 
ça plante, Visual me sort une erreur lié à _CDECL (ça a un rapport avec l'appel de pointeur ->, mais j'm'y connais pas plus donc bon.
 
par contre si je définis une fonction quelconque dans le code principal du main, et que je la passe en paramètre, aucun souci. Ca vient vraiment du fait que le paramètre passé n'est pas une fonction normal, mais une méthode d'un pointeur de classe.
 
SVP trouvez moi une soluce !! lol

Reply

Marsh Posté le 09-03-2006 à 17:02:35    

non, fait une recherche et ouvre les yeux.

Reply

Marsh Posté le 09-03-2006 à 17:33:02    

désolé mais je trouve pas, mais merci de m'aider, ça fleure bon la bonne ambiance forumesque ici lol

Reply

Marsh Posté le 09-03-2006 à 17:36:51    

de plus, je souligne que je souhaite le code le plus souple et générique possible, donc adieu une déclaration de paramètre évoquant une classe spécifique, style :
 
void meth0(B::*function_name)(..))
 
je veux pouvoir utiliser la méthode de cette classe, en passant n'importe quel méthode de n'importe quelle classe

Reply

Marsh Posté le 09-03-2006 à 17:39:02    

bah tu pourrais au moins faire l'effort de regarde dans les 10 premiers topics de la cat C++, mais non,c 'est trop difficile.
 
tu veux du générique ? ben tu template. et tu functor. et tu <typename T> ... T(x) et on en parle plus.

Reply

Marsh Posté le 09-03-2006 à 17:56:43    

lol si faut lire toutes les pages de tous les topics dont le nom n'exprime pas ton problème, on n'en sort plus...d'un autre côté, ptet que certains topic évoquent des technique que je ne comprends pas forcément, puisqu'on est pas tous aussi calé que Taz en C++ (functor je connais pas), m'enfin c'est pas grave...jv me démerder avec google, et tant pis pour ma gueule

Reply

Marsh Posté le 09-03-2006 à 17:56:43   

Reply

Marsh Posté le 09-03-2006 à 18:27:01    

Utilise "delegate" comme mot clé pour ta recherche, ca marchera mieux.
 
Et ya effectivement un sujet C++ la dessus (avec des beaux liens pour encore plus d'explications) qui est passé ya pas longtemps.

Reply

Marsh Posté le 30-03-2006 à 23:16:51    

Bonjour,
Au lieu de passer une fonction simple comme paramètre, passe une _closure : le compilateur permet alors de rentrer une méthode de la classe, et de récupérer les informations de la classe (ceci fonctionne sous C++Builder).


Message édité par ami6 le 30-03-2006 à 23:17:46
Reply

Marsh Posté le 30-03-2006 à 23:24:52    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed