hello...
Je cherche à faire le même type de manip qu'ici
http://www.developpez.net/forums/showthread.php?t=59461
mais je m'en sors pas avec ce bout d'exemple.
Quelqu'un peut-il m'orienter?
merci d'avance
 Passage de méthode en paramètre d'une autre méthode
 Passage de méthode en paramètre d'une autre méthode
				
				
						
						
				hello...
Je cherche à faire le même type de manip qu'ici
http://www.developpez.net/forums/showthread.php?t=59461
mais je m'en sors pas avec ce bout d'exemple.
Quelqu'un peut-il m'orienter?
merci d'avance
 
 
				
				
						
						
				En fait je ne vois pas en quoi le code donnée dans le topic que tu donne en lien envoie une fonction en paramètre.
Envoyé par Freeze
Je sais que c'est possible à faire, mais je ne me souvient plus trop comment, je cherche et je te dit quoi.Envoyé par say
A plus
 
			
			






 
			
			
			
			 
			
				
 
 
				
				
						
						
				Salut.
Il y a un moment je m'étais servi des pointeurs sur fonctions sous BCB pour un truc précis, que je vais tenter d'expliquer le plus clairement.
J'avais un bot irc, et je voulais qu'en fonction d'une commande tapée, ça appelle la fonction appropriée.
Bien sûr la solution facile aurait été au moment de la récupération du nom de la commande de faire un:
Seulement, le défaut de cette méthode est que, si le nombre de fonctions potentielle augmente, avec l'enchainement des if / else if, la lisibilité c'est plus trop ça. Et puis surtout, c'est tellement moins drôle :] La solution: les pointeurs sur fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
L'idée: On crée une structure "SHash" qui contient le nom de la commande, et un pointeur sur fonction (la fonction à exécuter)
On initialise au début du programme une liste de pointeurs qui contiendra tous nos objets "SHash".
Ensuite, quand on parse la string reçue, ne nous reste plus qu'à parcourir notre liste à la recherche de la commande appropriée.
Concrètement:
Dans mon point h :
Ensuite, dans le point cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Et au moment où on parse:
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
Passons l'implémentation des fonctions en question hein... Et qui, dans cet exemple, doivent porter le même nom que leur identifiant pour que ça fonctionne bien évidemment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Voilà voilà, cet exemple n'a que peu d'intéret en pratique à dire vrai, c'était plus pour la forme que pour le fond :]
J'espère que ça t'a pas embrouillé plus qu'autre chose. Dans ton cas en fait, le truc juste important à retenir, c'est comment déclarer un prototype de pointeur sur fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
 
 
				
				
						
						
				Je trouve l'expliquation très bonne, je n'aurrai jamais fait mieux, (je suis une quiche en expliquation)
 
 
				
				
						
						
				Merci beaucoup beaucoup à Runlevel pour son explication, c'est parfait.
c'est clair...et en plus ça marche
bonne continuation à tous
Simon
Edited : à mettre en FAQ maybe?
 
 
				
				
						
						
				Si BCB supporte, boost.function, boost.bind et boost.signal sont des moyens de réaliser ce genre de choses proprement.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
 
 
				
				
						
						
				Ah...moi je connais pas du tout.
ça consiste en quoi?
 
 
				
				
						
						
				boost.function définit un type fonction qui accepte toute sortes de fonctions (membre ou non). Cela a servi de base a ce qui, je crois bien, a été accepté pour le futur standard C++ de 2009.
boost.bind est un moyen d'attacher facilement des paramètres à des fonctions (et au passage de définir de nouvelles fonctions ("foncteurs" pour être plus précis) en fixant des paramètres).
boost.signal est une implémentation de signaux en C++.
Je suis un peu court sur le temps. Je t'invite à regarder sur le site de boost (http://www.boost.org/) si tu veux en savoir plus.
Bon WE.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Partager