Je tente de créer un système de messagerie dans lequel n'importe quelle classe dérivée de "Messageable" peut recevoir des messages basés sur la façon dont la fonction handleMessage() est surchargée. Par exemple:Comment puis-je créer une table de recherche basée sur le type afin de mettre en œuvre la répartition multiple en C++?
class Messageable {
public:
void takeMessage(Message& message) {
this->dispatchMessage(message);
}
protected:
void bindFunction(std::type_info type, /* Need help here */ func) {
m_handlers[type] = func;
}
void dispatchMessage(Message& message) {
m_handlers[typeid(message)](message);
}
private:
std::map<std::type_info, /*Need help here*/ > m_handlers;
};
class TestMessageable : public Messageable {
public:
TestMessageable() {
this->bindFunction(
typeid(VisualMessage),
void (TestMessageable::*handleMessage)(VisualMessage));
this->bindFunction(
typeid(DanceMessage),
void (TestMessageable::*handleMessage)(DanceMessage));
}
protected:
void handleMessage(VisualMessage visualMessage) {
//Do something here with visualMessage
}
void handleMessage(DanceMessage danceMessage) {
//Do something here with danceMessage
}
};
En un mot, je veux la version correcte de handleMessage à appeler en fonction de la valeur RTTI d'un message donné.
Comment est-ce que je peux l'implémenter de préférence sans une sorte de déclaration de commutateur/cas monolithique.
ne pas avoir ce genre Qt de chose? .... les événements & whatnot via la méthode virtuelle QObject :: Event() .... – ianmac45