class Signal
{
public: ~Signal () {}
private: Signal () {}
public:
class Event {...};
template<class Subject, class Observer, class UserEvent>
static
void
connect(
Subject&, Observer&,
void (Observer::*)(const UserEvent&, Subject*));
template<class Subject, class Observer, class UserEvent>
static
void
connect(
Subject&, Observer&,
void (*)(const UserEvent&, Subject*, Observer*));
template<class Subject, class Observer, class UserEvent>
static
bool
disconnect(
Subject&, Observer&,
void (Observer::*)(const UserEvent&, Subject*));
template<class Subject, class Observer, class UserEvent>
static
bool
disconnect(
Subject&, Observer&,
void (*)(const UserEvent&, Subject*, Observer*));
template<class Subject, class UserEvent>
static
void
emit(Subject&, const UserEvent&);
private:
struct Callee {};
typedef void (Callee::*MemberCallback)
(const Event&, void*);
typedef void (*LonelyCallback)
(const Event&, void*, void*);
class Parcel {...};
typedef list<Parcel> List;
typedef map<const void*, List> Map;
Map _map;
void _emit (void*, const Event&);
void _connect (const void*, const Parcel&);
bool _disconnect (const void*, const Parcel&);
static Signal& _signals ();
};
End of Listing