#include <iostream>
#include <memory>
#include <string>
using namespace std;
class Event
{
public:
string type;
string source;
virtual ~Event() { }
};
class KeyEvent : public Event
{
public:
string key;
string modifier;
virtual ~KeyEvent() { }
};
class MouseEvent : public Event
{
public:
string button;
int x;
int y;
virtual ~MouseEvent() { }
};
void handleEvent(const KeyEvent& e)
{
if(e.key == "SPACEBAR")
cout << "Hello world! The Space key was pressed ;)" << endl;
}
auto_ptr<Event> generateEvent()
{
auto_ptr<KeyEvent> ret(new KeyEvent);
ret->type = "KEYBOARD_EVENT";
ret->source = "Keyboard0";
ret->key = "SPACEBAR";
ret->modifier = "none";
return auto_ptr<Event>(ret.release());
}
int main()
{
auto_ptr<Event> pEvent = generateEvent();
KeyEvent *pKeyEvent = dynamic_cast<KeyEvent*>(pEvent.get());
if (pKeyEvent) {
handleEvent(*pKeyEvent);
}
return 0;
}