I'm attempting to make a messaging system in which any class derived from "Messageable" can receive messages based on how the function handleMessage() is overloaded. For example:
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
}
};
In a nutshell I want the correct version of handleMessage to be called based on the RTTI value of any given message.
How can I implement this preferably without some sort of monolithic switch/case statement.