boost::bind & boost::pointeurs de fonction de la surcharge ou de l'basées sur des modèles de fonctions de membre

J'ai un mécanisme de rappel, les classes concernées sont les suivantes:

class App
{
    void onEvent(const MyEvent& event);
    void onEvent(const MyOtherEvent& event);

    Connector connect;
}

class Connector
{  
   template <class T> void Subscribe(boost::function <void (const T&)> callback);
}

App::App()
{
    connect.Subscribe<MyEvent>(&App::OnEvent<MyEvent>);
}

Tout d'abord ce code ne compile pas, c'est une illustration.

L'utilisation de modèles complique mon exemple, mais je l'ai quitté en raison de son incidence sur mon problème. Il me semble certain que mon abonnez-vous doit être basé sur un modèle, car le Connecteur de la classe ne sais pas combien de types d'événements qu'il traite. Lorsque j'essaie de créer un:

boost::function f = &App::OnEvent, 

J'ai essayé de créer OnEvent comme un modèle de fonction, avec des spécialisations, mais il semble que le compilateur est le traitement de mon OnEvent fonctions que les surcharges plutôt que de spécialisations de modèle, sinon je obtenir le modèle de spécialisation sont pas dans l'espace de noms d'erreur si j'essaie de le déclarer explicitement comme

template <> OnEvent(const MyEvent& e) ...

Que je peux obtenir à la suite de compilation:

boost::function <void (App*, const MyEvent&)> f = &App::OnEvent;
f(this, e); 

Qui compile, des pistes, et des œuvres.

boost::function<void (const MyEvent&)> g = boost::bind(&App::OnEvent, this);

ne le fait pas. Je pense que c'est parce que je ne suis pas correctement en précisant l'adresse d'une fonction surchargée.

Après avoir expliqué tout cela à l'ours en peluche - je pense que ma question est "Comment puis-je créer correctement un pointeur de fonction à une surcharge ou basées sur des modèles de fonction de membre et lier le pointeur this?"

J'ai googlé ce d'avoir exactement le même problème avec la génération d'événements, quelles sont les chances!

OriginalL'auteur swarfrat | 2009-12-16