Pointeur de fonction membre avec heritage

Pointeur de fonction membre avec heritage - C++ - Programmation

Marsh Posté le 07-02-2007 à 12:51:11    

Bonjour !
 
Voila mon probleme:
 
J'ai une classe abstraite "Technique" qui possede un pointeur vers une fonction:

Code :
  1. class Technique {
  2. protected:
  3.   (Technique::*function)(int) _function;
  4. }


 
Et une classe fille, qui doit appeler cette fonction:

Code :
  1. class MaTechnique : public Technique {
  2. //(...)
  3. int MaTechnique::maFonction (int i)
  4. {
  5.    // des machins
  6. }
  7. int MaTechnique::setFunction () {
  8.    this->_function = maFonction (10);
  9. }


 
Le probleme a la compilation est que j'ai une incompatibilité de type à l'appel de "maFonction"...:

cannot convert from 'void (__cdecl *)(int)' to 'void (__thiscall Technique::* )(int)'


J'ai essayé avec un dynamic_cast, mais sans succes (mais ma syntaxe etait peut etre pas la bonne...)
 
Et le probleme est que je ne peux pas utiliser de fonction static, car la fonction "maFonction" doit modifier des variables membres de MaTechnique...
 
Je ne sais pas si c'est clair ...
Une idée ?

Reply

Marsh Posté le 07-02-2007 à 12:51:11   

Reply

Marsh Posté le 07-02-2007 à 13:26:20    

c'est un pointeur sur fonction, pas un objet magique qui va enregistrer les arguments que tu veux lui passer. La STL te permet de faire des functors pour cette utilisation.

Reply

Marsh Posté le 07-02-2007 à 13:31:21    

theshockwave a écrit :

c'est un pointeur sur fonction, pas un objet magique qui va enregistrer les arguments que tu veux lui passer. La STL te permet de faire des functors pour cette utilisation.


 
ok, merci ! je vais voir de ce coté ...
 Je reviens si jamais je suis perdu ..

Reply

Marsh Posté le 07-02-2007 à 13:54:25    

Loki::Function ou BOOST::function permettent de gérer ça bien mieux que la STL apr ailleurs ;)

Reply

Marsh Posté le 07-02-2007 à 13:59:03    

oui, d'ailleurs, j'ai indiqué la STL, mais je viens de réaliser que je ne saurais pas faire un Generator à partir d'une fonction unaire [:pingouino]
 
Edit : en fait, la doc SGI tendrait à me faire dire que ca doit être fait à la main http://www.sgi.com/tech/stl/AdaptableGenerator.html
 
dans ce cas, ma solution n'avançait pas trop le problème, mise à part d'indiquer qu'il convient d'avoir une classe qui stocke l'argument ainsi que le pointeur sur fonction pour le transmettre au moment de l'appel.


Message édité par theshockwave le 07-02-2007 à 14:01:19
Reply

Sujets relatifs:

Leave a Replay

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