I m 采用信号-Slot C++执行,见:。 在用户接口图书馆Im发展中安装活动听众。
用户浏览器也一样:
class DialEventListener : public EventListener {
void handleEvent(Event event){
…
cout << "Event on" << event.source.name << end;
}
}
int main(){
Interactor dial1;
dial1.addListener(ROTATE_EVENT, DialEventListener());
…
}
为界定活动听众,用户将分级<密码>,以创建习惯活动手稿。 但在实施<代码>Interactor:addListener()时,我使用信号码。
下面是一部显示我如何试图利用信号执行活动听众的密码。 我使用<代码>的地图。 活动类型代码>至<代码>,以说明触发多种类型活动的相互作用。
typedef map< EventType, Signal1<Event> > EventTypeListenerMap;
class Interactor {
private:
EventTypeListenerMap listener_map;
public:
void TriggerEvent(Event e){
Signal1<Event> signal = listener_map[e.type];
signal(e);
}
void addListener(EventType e_type, EventListener listener){
…
//Find the signal for a particular kind of event.
Signal1<TUIKitEvent> signal = listener_map[e_type];
//Plug a delegate into that signal s slot
signal.Connect( &listener, &EventListener::handleEvent);
}
void addListener(EventType e_type, EventListener listener, void (EventListener::*handler)(Event)){
…
Signal1<TUIKitEvent> signal = listener_map[e_type];
signal.Connect( &listener, handler);
}
}
class EventListener {
virtual void handleEvent(Event event){
}
}
使用信号定位装置的Im应当隐藏在用户身上,因此我刚刚写了这一版本的<代码>。 Interactor:addListener (EventType, FinalListener, void (EventListener:*) as a sanityeck to ensure I was through the right member function pointer to be subject to this sign. 但是,成员职能点是具体类别,因此,如何界定一个功能,其签名是接受从事件类型学到的方法,而这种方法可能还不存在?