Why not use inheritance and a common base class? Makes simpler code and also you are detailing with objects so you have data, other methods etc.
i.e. something like this
class incomingMsgReceiver {
public:
virtual void msgReceived(char *msg) = 0;
};
class MyMessage : public incomingMsgReceiver {
public virual void msgReceieved(char *msg);
}
class OtherMyMessage : public incomingMsgReceiver {
public virual void msgReceieved(char *msg);
}
void MyMessage::msgReceived(char *msg)
{
/// Do stuff here
}
void msgReceived::OtherMyMessage(char *msg)
{
/// Do stuff here
}
Then for your common.h
:
class CommonIO
{
private:
std::vector<incomingMsgReceiver *> listeners;
public:
void addListner(incomingMsgReceiver *reveiver) { listners.push_back(reveiver); }
void incomingMsgReceived(char*msg)
{
for (unsigned int j = 0; j < listeners.size(); j++)
{
listeners[j]->msgReceived((msg);
}
}
};