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);
}
हाय,libev C++ आवरण function_thunk
मैं libev के सी ++ आवरण EV ++। ज उपयोग कर रहा हूँ। ev ++ में कोड का यह टुकड़ा है। एच मुझे पता है कि एपीआई के रूप में कैसे उपयोग करें, लेकिन पूरी तरह से समझ में नहीं आता है।
ev::sig signal_watcher(evloop);
signal_watcher.set<sigint_cb>();
signal_watcher.start(SIGINT);
जहां sigint_cb के समारोह हस्ताक्षर है:: मैं इस प्रकार घटना पाश में एक Ctrl-C द्रष्टा सेट कर सकते हैं
void sigint_cb(ev::sig &w, int revents)
कोई व्याख्या कर सकते हैं क्यों function_thunk जादुई मेरी sigint_cb समारोह डाल सकता
void (*cb)(EV_P_ ev_watcher *w, int revents)
क्या सी ++ जादूगर यह हस्ताक्षर है? धन्यवाद।
धन्यवाद। तो अगर मैं std :: bind के संदर्भ में सोचता हूं, तो मैं sigint_cb को function_thunk पर बाध्य कर रहा हूं, है ना? क्योंकि यह वास्तव में लगता है कि std :: बाइंड क्या करता है। – lppier