2017-04-01 7 views
0

Je veux simplement passer une fonction lambda à une fonction pour les rappels. J'utilise std::function pour les rappels. J'ai besoin de transmettre des données à cette fonction et c'est là que je rencontre des problèmes. Le code ci-dessous les erreurs disant "ne peut pas convertir au type attendu". L'objectif est d'utiliser les rappels pour les événements avec SDL. Je ne suis pas sûr que ce soit la bonne façon de procéder. Je stocke la fonction de rappel dans un unordered_map avec la clé étant un SDL_Event.type et un vector de std::function.std :: fonction avec erreur lambda pour les rappels d'événements SDL

J'appelle le dispatch() dans l'interrogation d'événement et subscribe dans la configuration. L'erreur se produit dans le [] du subscribe() lambda

// main.cpp 
window->subscribe(SDL_KEYDOWN, [](SDL_Event& ev) -> void { 
    std::cout << "key pressed" << std::endl; 
}); 

// eventhandler.cpp 
void EventHandler::subscribe(int _event, std::function<void(const SDL_Event&)> _callback) 
{ 
    m_callbacks[_event].push_back(_callback); 
} 

Répondre

0

erreur stupide fait ... Les paramètres ne correspondent pas. Le code correct qui fonctionne est ci-dessous. C'est à dire. Je n'ai pas eu le const dans le lambda ...

window->subscribe(SDL_KEYDOWN, [](const SDL_Event& ev) -> void { 
    std::cout << "key pressed" << std::endl; 
}); 

void EventHandler::subscribe(int _event, std::function<void(const SDL_Event&)> _callback) 
{ 
    m_callbacks[_event].push_back(_callback); 
}