Bonjour,
avant toutes choses, je tiens à préciser que je ne suis pas un as en C++, loin de là... Alors sachez être indulgeant.
Bref, dans le cadre de la réalisation d'un projet perso j'aurai à mettre en place une class permettant l'appel de fonctions en cas de détection de collisions entre objets (mais on se fou un peu de la finalité de tout ça). J'ai lu qu'il était impossible d'utiliser des fonctions membres non static comme fonction de callback, et ça parait assez logique d'après la doc que j'ai lu. Cette même doc préconise aussi de passer une instance de la class à la méthode static, en remplacement d'un appel à une méthode non static.
Donc j'essais de mettre en oeuvre tout cela avec quelques test.
J'en arrive à quelque chose de fonctionnel avec le code suivant :
Code :
#define NULL 0 #include <iostream> class A { public: void registerEvent( void (*callBackFunction)(void* i),void* instB=NULL) { callBackFunction(instB); } }; class B { public: int i; static void test(void *i) { B* b = (B*) i; std::cout<< "Valeur de b->i : " << b->i << std::endl; } }; int main() { B* b = new B(); b->i = 100; A* a = new A(); a->registerEvent(&b->test,b); return 0; }
|
Cet exemple est censé afficher "La valeur de b->i est : 100", et c'est bien ce qu'il se passe.
Je n'ais donc pas vraiment de problème.
Ceci-dit, j'essais de faire quelque chose d'assez générique. C'est à dire pouvant aussi bien être utilisé avec une fonction membre static ou une fonction classique. D'où la présence de void* instB=NULL.
Mes questions :
Cela vous parait-il correctement construit? (Excepté l'absence de header)
Puis-je faire mieux?
J'ai lu (je ne sais plus où) qu'on pouvait simplifier l'écriture de tout ça avec un typedef, mais je ne vois pas trop comment... Pouvez-vous m'éclairer?
En vous remerciant par avance,
bonne journée!
Message édité par dwogsi le 17-10-2007 à 07:29:37
---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/