class event {\fbox{event}
protected: event(event* x) : ev(x) {} public: int type() { return ev->type(); } void* rawevent() { return ev; } private: event* ev; }; class xevent : public event {\fbox{X}
public: int type() { return X->type(); } private: struct XEvent* X; };