Design event dispatcher, event source, event watcher with type safety in C++
<p>Need some help in sorting out design options for simulation framework in C++ (no C++11).
The user creates an "event dispatcher" and registers interest (using "watchers") in occurrence of "events". The  dispatcher internally holds "event sources" which are used to detect event activation and manage notifications to watchers. There's a 1:1:1 mapping between watcher, event and event source classes.</p>

<p>I'd like to extend the system with</p>

<ol>
<li>ability to register any sub-set of event watchers only in dispatcher (request unsupported notification will fail)</li>
<li>alternative implementations for event sources (e.g., one or multiple watchers per event)</li>
<li>extended event types (i.e., inheritance). Watcher and Source can handle sub-classes    as if they're the base type, albeit with reduced functionality.</li>
<li>user defined event, event source and event watcher. For completely new events</li>
</ol>

<p>I've considered using "event type identifiers" (either strings or Base.Derived notation), it works but  doesn't feel correct (e.g., type safety relies on runtime integers, inheritance is limited, too many type casts...)
Would appreciate suggestions for code structure and mechanisms.</p>
