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 :

Creation de map sur pointeur sur fonction membre.


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Creation de map sur pointeur sur fonction membre.
    Bonjour,

    Je souhaite creer un gestionnaire d'event pour la SFML.
    J'ai decider de faire ce dernier avec une map ayant pour clef le type d'event et pour valeur un pointeur sur une fonction membre de ce meme objet.
    J'ai essayer beaucoup de "magouille" différentes et celle que je vous joint est celle qui me semble le plus correcte.

    Pouvez vous m'aider svp ?

    EventManager.h:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #pragma once
     
    #include				<map>
    #include				<iostream>
    #include				<string>
    #include				"mySFML.h"
     
    class IEventManager
    {
    public:
    	virtual void closeApp(sf::RenderWindow *);
    };
     
    typedef void (IEventManager::*FPTR)(sf::RenderWindow*);
     
    class EventManager: public IEventManager
    {
    private:
    	sf::Event currentEvent;
    	sf::RenderWindow *app;
    	std::map<sf::Event::EventType, FPTR> eventMap;
    public:
    	EventManager(sf::RenderWindow *app);
    	~EventManager(void);
    	void	initEventMap();
    	void	treatEvents();
    	void	closeApp(sf::RenderWindow *);
    };
    EventManager.cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #include "EventManager.h"
     
    EventManager::EventManager(sf::RenderWindow *win)
    {
    	app = win;
    	initEventMap();
    }
     
    void    EventManager::closeApp(sf::RenderWindow *app)
    {
    	app->close();
    }
     
    void	EventManager::initEventMap()
    {
    	eventMap[(sf::Event::Closed)] = &IEventManager::closeApp;
    }
     
    void	EventManager::treatEvents()
    {
    	while (app->pollEvent(currentEvent))
    	{
    		if (eventMap[currentEvent.type])
    		{
    			 eventMap[currentEvent.type](this->app);
    		}
    	}
    }
     
    EventManager::~EventManager(void)
    {
    }
    Le sortie de compilation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    1>------ Début de la génération*: Projet*: ZERO_CHECK, Configuration*: Debug Win32 ------
    2>------ Début de la génération*: Projet*: c_rtype++, Configuration*: Debug Win32 ------
    2>  main.cpp
    2>  EventManager.cpp
    2>..\src\EventManager.cpp(25): error C2064: le terme ne correspond pas à une fonction qui prend 1 arguments
    2>  Génération de code en cours...
    3>------ Début de la génération*: Projet*: ALL_BUILD, Configuration*: Debug Win32 ------
    3>  Build all projects
    4>------ Génération ignorée*: Projet*: INSTALL, Configuration*: Debug Win32 ------
    4>Projet non sélectionné dans le cadre d'une génération pour cette configuration de solution 
    5>------ Génération ignorée*: Projet*: PACKAGE, Configuration*: Debug Win32 ------
    5>Projet non sélectionné dans le cadre d'une génération pour cette configuration de solution 
    ========== Génération*: 2 a réussi, 1 a échoué, 0 mis à jour, 2 a été ignoré ==========
    Voila merci.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Le problème, c'est que tu passes un pointeur sur une fonction membre, mais tu ne donnes pas d'objet au moment de l'appel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IEventManager *anObject;
    (anObject->*eventMap[currentEvent.type])(this->app);
    Tu peux aussi regarder la F.A.Q : pointeur sur fonction membre

    Ceci dit, aujourd'hui, je n'utiliserais pas des pointeurs sur des fonctions membres mais des std::function qui te permettraient de lier un évènement à un objet (bind ou lambda). Tu peux aussi regarder du côté de boost.signal

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour tout c'est bon tu as trouver le pb ! xD

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question map avec pointeur sur class.
    Par shirohige dans le forum C++
    Réponses: 7
    Dernier message: 22/11/2013, 09h45
  2. Pointeur de fonction membre sur VC6
    Par androz dans le forum C++
    Réponses: 7
    Dernier message: 09/09/2011, 22h33
  3. Probleme sur modèle de fonction membre
    Par Sebou dans le forum C++
    Réponses: 1
    Dernier message: 30/05/2008, 01h06
  4. Réponses: 4
    Dernier message: 15/10/2006, 18h05
  5. Pointeur de fonction membre
    Par legend666 dans le forum C++
    Réponses: 1
    Dernier message: 04/10/2005, 20h46

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