Je suis en train de concevoir une méthode pour une classe de gestionnaire d'entrée. Voici un code de pseudo ...Méthode efficace de transmission de la fonction de membre de rappel
void InputHandler::ScanEvents(boost::function1< void, std::string& > &func) {
// Scan keys, determining string to pass
// If string found, call func with string as its argument on object tied to func
}
Je ne suis pas sûr de savoir comment mettre en œuvre, ou s'il est même possible, puisque le point de l'ensemble d'une fonction est de séparer de son interlocuteur. L'idée est qu'un objet possède une fonction membre privée et un membre boost :: function qui le détient. Chaque fois qu'il appelle ScanEvents sur son InputHandler, il transmet cette fonction, de sorte que ScanEvents peut "l'activer" chaque fois qu'un événement approprié est trouvé.
L'efficacité est une préoccupation, car c'est dans un domaine où les performances sont importantes, et cette fonction est appelée fréquemment.
P.S. Je jure que je me souviens avoir lu un exemple comme celui-ci dans l'un des livres de Scott Meyer, mais je ne le trouve pas pour la vie de moi. Peut-être était-ce dans Modern C++ Design ... regardant ...
Test maintenant. – random
A travaillé comme un charme. Mais une question. Pour une raison quelconque, boost :: function ne compilerait pas en tant que type de paramètre (message d'erreur: nombre incorrect d'arguments template), il n'accepterait que boost :: function . J'ai suivi la syntaxe portable listée à http://www.boost.org/doc/libs/1_43_0/doc/html/function/tutorial.html#id866854. Une idée de pourquoi ça n'a pas marché? –
random
Non, vous n'avez pas suivi la syntaxe portable. Regardez plus attentivement. Les modèles ne portent pas le même nom. –