Bonjour
.
Voilà je cherche à utiliser un callback en C++ mais j'ai beaucoup de mal.
J'ai une classe qui initialise la bibliothèque GLFW (pour l'affichage OpenGL), et je veux lui attribuer un callback :
1 2 3 4 5 6 7
| class MaClasse
{
MaClasse ();
~MaClasse ();
void AssignerCallback ();
} |
Et la fonction AssignerCallback :
glfwSetWindowSizeCallback (WindowSizeCallback);
Et le problème c'est justement cette fonction WindowSizeCallback. J'ai essayé de déclarer private statique la fonction WindowSizeCallback comme ceci :
static void GLFWCALL WindowSizeCallback (int width, int height);
Pas d'erreur à la compilation, mais la fonction n'est jamais appelée, donc j'en conclu que ce n'est pas comme ça. J'ai tenté de faire un extern "C" à l'intérieur de la classe mais ça ne fonctionne pas non plus. Je ne veux pas faire de l'héritage (je crois que c'est possible en dérivant des classes,...), et je crois que c'est possible avec boost mais j'ai un peu de mal.
J'ai essayé, en utilisant boost::function en créant une fonction :
1 2
|
boost::function <void (int width, int height)> WindowCallback; |
puis une fonction statique :
static void GLFWCALL MaFonction (int width, int height) {};
Et ensuite écrire dans la fonction AssignerCallback :
1 2
| WindowCallback = &MaFonction;
glfwSetWindowSizeCallback (WindowCallback); |
Mais évidemment ça ne compile pas :/ : Erreur 1 error C2664: 'glfwSetWindowSizeCallback' : impossible de convertir le paramètre 1 de 'boost::function<Signature>' en 'GLFWwindowsizefun' d:\utilitaires\developpement\visual c++\projets\gamekult project\src\gkp_output.cpp 32
Bref, je demande donc votre aide. J'en suis sûr qu'il y a une méthode élégante de faire ça avec boost::function (boost::bind ?), mais j'avoue avoir un peu de mal :d.
Partager