par , 28/05/2016 à 17h04 (4322 Affichages)
Les fonctions de callback permettent la création de système modulaire, ils permettent de passer une fonction de rappel ("callback" en anglais) à une autre fonction qui pourra se servir de cette dernière. Pour cela on doit définir un modèle que devra suivre cette fonction (type de retour, nombre et types des arguments). pour plus de détails voire la page Wikipédia.
Création du modèle de la fonction
Pour créer le modèle de la fonction on opère de la manière suivante :
1 2 3
|
// Modèle de la fonction de callback
typedef void (*processEvent) (sf::Event); |
dans l'ordre :
- void : type de retour de la fonction
- (*processEvent) : nom du modèle, il nous servira plus tard à demander une fonction suivant ce modèle
- (sf::Event) : type de l'argument demandé
Demandé une fonction de callback
Pour demander une fonction de callback en paramètre d'une fonction, on opère de la façon suivante :
1 2 3
|
// Prototype de la fonction
void dispatchEvents(processEvent pe); |
Ici on demande en paramètre une fonction qui suit le modèle que l'on à crée à l'étape précédente, maintenant si on souhaite créer une fonction qui suit ce modèle :
1 2 3
|
// Prototype de la fonction de callback
void processEvents(sf::Event event); |
Ensuite il nous suffit de passer cette fonction en paramètre (référence) et de s'en servir comme normalement sans oublier les paramètres qu'elle demande, ce qui pourrai donner par exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
// appel
dispatchEvents(&processEvents);
// Corps de la fonction dispatchEvents
void dispatchEvents(processEvent pe){
sf::Event event;
while(window.pollEvent(event)){
if(event.type == sf::Event::Closed)
isCloseRequest = true;
pe(event);
}
} |
Tout cela fonctionne également avec les méthodes de classes.