void set_ (const void *data, void (*cb)(EV_P_ ev_watcher *w, int revents)) throw()
{
this->data = (void *)data;
ev_set_cb (static_cast<ev_watcher *>(this), cb);
}
// function callback
template<void (*function)(watcher &w, int)>
void set (void *data = 0) throw()
{
set_ (data, function_thunk<function>);
}
template<void (*function)(watcher &w, int)>
static void function_thunk (EV_P_ ev_watcher *w, int revents)
{
function
(*static_cast<watcher *>(w), revents);
}
Hallo,libev C++ Wrapper function_thunk
Ich verwende libev der C++ Wrapper ev ++. H. Es gibt dieses Stück Code in ev ++. H, dass ich weiß, wie man als API verwendet, aber nicht vollständig verstehe. kann ich eine Ctrl-C-Beobachter in der Ereignisschleife wie folgt festgelegt:
ev::sig signal_watcher(evloop);
signal_watcher.set<sigint_cb>();
signal_watcher.start(SIGINT);
wo sigint_cb die Funktion Signatur:
void sigint_cb(ev::sig &w, int revents)
Kann jemand erklären, warum function_thunk magisch meine sigint_cb Funktion werfen kann Unterschrift zu
void (*cb)(EV_P_ ev_watcher *w, int revents)
Was C++ Zauberei ist das? Danke.
Danke. Wenn ich also in Bezug auf std :: bind denke, binde ich sigint_cb an function_thunk, oder? Denn es fühlt sich wirklich so an, wie es std :: bind tut. – lppier