J'ai essayé d'implémenter un système d'événements de type C# en C++ avec les modèles de fonctions tr1 utilisés pour stocker une fonction qui gère l'événement.Comparaison des objets std :: tr1 :: function <>
J'ai créé un vecteur pour que les auditeurs peuvent être attachés multiples à cet événement, i.e. .:
vector< function<void (int)> > listenerList;
Je voudrais pouvoir supprimer un gestionnaire de la liste pour arrêter un auditeur de recevoir des événements. Alors, comment puis-je trouver l'entrée dans cette liste qui correspond à un écouteur donné? Puis-je tester si un objet 'function' dans la liste fait référence à une fonction particulière?
Merci! EDIT: Après avoir examiné l'approche boost :: signal, il semble qu'il soit probablement implémenté en utilisant un système de jeton comme certains d'entre vous l'ont suggéré. Here's some info on this. Un observateur conserve un objet "Connexion" lorsqu'il se connecte à un événement, et cet objet de connexion est utilisé pour se déconnecter si nécessaire. Donc, il semble que vous utilisiez Boost ou rouliez le vôtre avec tr1, le principe de base est le même. c'est-à-dire que ce sera un peu maladroit :)
Si vous allez utiliser une structure avec des informations supplémentaires, vous pouvez aussi stocker les foncteurs comme des valeurs de hachage, et le GUID/any comme des clés de hachage. :-) –
Vous ne pouvez pas stocker les foncteurs comme valeurs de hachage. Tu ne peux rien faire avec eux. Les emballer dans une structure (même une structure d'un seul élément du foncteur) vous permettra de faire n'importe quoi. Il est intentionnel qu'ils ne puissent pas être comparés/hachés/etc sans travail. – hazzen