I was reading Simple Event Handling article, and I tried to re-implement the Event struct as a class with derived classes for each EventType. The base class is simply the EventType and a getter. I want each derived type to expand on this by adding a member variable of a unique type and a getter. However, that doesn't make for a common interface, so I am not able to get the polymorphic behavior I want.
In the code sample SendEvent just calls the EventHandler for each listener and at this point I cannot access the derived class' getString() through the base class. Right now I have to static_cast back to its derived type to use it. Am I just missing something or is this a bad design on my part?
class Event
{
public:
typedef unsigned long EventType;
explicit Event(EventType type);
virtual ~Event();
EventType getType() const;
private:
EventType mType;
};
class EventStr : public Event
{
public:
typedef unsigned long EventType;
EventStr(EventType type, std::string str);
std::string getString() const;
private:
std::string mString;
};
void EventDispatcher::sendEvent(const Event& event);
main()
{
const Event& event = EventStr(0x496bf752, "derived data");
sendEvent(event);
}