IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Callbacks en C++ (GLFW)


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    R�dacteur
    Avatar de Bakura
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par d�faut Callbacks en C++ (GLFW)
    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 :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    class MaClasse
    {
    MaClasse ();
    ~MaClasse ();
     
    void AssignerCallback ();
    }
    Et la fonction AssignerCallback :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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 :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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 :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    boost::function <void (int width, int height)> WindowCallback;
    puis une fonction statique :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    static void GLFWCALL MaFonction (int width, int height) {};
    Et ensuite �crire dans la fonction AssignerCallback :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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.

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Quelle est la d�finition du type GLFWwindowsizefun ?

    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.
    Je n'en suis pas si s�r.

  3. #3
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Tu semblais bien parti avec ta premi�re solution, d'ailleurs �a compilait. Faudrait plut�t chercher � savoir pourquoi �a ne produisait pas le r�sultat escompt�.

    Pour ce qui est de boost::function, j'ai un gros doute aussi, c'est pas vraiment le genre de trucs compatibles avec les APIs C qui demandent des callbacks.

  4. #4
    R�dacteur
    Avatar de Bakura
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par d�faut
    Et en utilisant boost::bind ? Bon je sais pas pourquoi �a marche pas la premi�re solution avec la fonction static. C'est de cette mani�re qu'on fait �a g�n�ralement ?

  5. #5
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Et en utilisant boost::bind ?
    Ca ne t'aidera pas plus, boost::bind c'est tr�s bien pour construire des foncteurs de n'importe quel type � partir de n'importe quoi, mais ce qu'il te faut ici c'est un bon vieux pointeur de fonction.
    Mais passer l'adresse d'une fonction statique qui dispatche �ventuellement vers l'instance correspondante, c'est tr�s bien aussi, peut-�tre juste un peu chiant � faire parfois.

    Pourquoi dis-tu que ta fonction n'est jamais appel�e ? Tu as mis un point d'arr�t dedans ? Une sortie quelconque sur la console ou dans un fichier ? Es-tu s�r au moins que ta fen�tre a �t� redimensionn�e (on ne sait jamais ) ?

  6. #6
    R�dacteur
    Avatar de Bakura
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par d�faut
    J'ai essay� avec le callback pour les touches, pareil, il n'est pas appel� (je fais un std::cout << "test" dans la fonction, �a me permet vite de voir).

    Fait encore plus �trange, m�me quand je d�clare la fonction callback en dehors de la classe, �a ne marche pas non plus, c'est super �trange... Je parcours le forum de GLFW pour voir....

Discussions similaires

  1. Fonction callback
    Par saibe dans le forum Linux
    R�ponses: 4
    Dernier message: 19/01/2012, 10h41
  2. [D�butant] fonction CALLBACK
    Par tlt dans le forum MFC
    R�ponses: 2
    Dernier message: 29/10/2004, 16h55
  3. Callback
    Par el_diablos dans le forum Langage
    R�ponses: 2
    Dernier message: 09/07/2004, 08h48
  4. Fonction callback dans une classe
    Par julian_ross dans le forum MFC
    R�ponses: 8
    Dernier message: 02/03/2004, 11h42
  5. [MFC] Un callback dans des MFC ...
    Par elsargento dans le forum MFC
    R�ponses: 3
    Dernier message: 18/02/2004, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo