#include class Widget { public: enum Signal { NONE }; typedef void(*Callback)(Widget&, Signal); typedef std::pair Event; typedef std::multimap EventTable; void insert(Signal signal, Callback callback); private: EventTable table; }; void Widget::insert(Widget::Signal signal, Widget::Callback callback) { table.insert(signal, callback); } void bar(void); void bar(Widget& w, Widget::Signal s) { } int main() { Widget w; w.insert(Widget::NONE, bar); return 0; }