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);
}
Hi,libev C++ wrapper function_thunk
Tôi đang sử dụng C libev của ++ wrapper ev ++. H. Có đoạn mã này trong ev ++. H mà tôi biết cách sử dụng như một API, nhưng không hiểu đầy đủ. tôi có thể thiết lập một watcher Ctrl-C trong vòng lặp sự kiện như sau:
ev::sig signal_watcher(evloop);
signal_watcher.set<sigint_cb>();
signal_watcher.start(SIGINT);
nơi chữ ký chức năng sigint_cb là:
void sigint_cb(ev::sig &w, int revents)
Ai đó có thể giải thích tại sao function_thunk kỳ diệu có thể bỏ chức năng sigint_cb của tôi chữ ký cho
void (*cb)(EV_P_ ev_watcher *w, int revents)
C++ phù thủy là gì? Cảm ơn.
Cảm ơn. Vì vậy, nếu tôi nghĩ về std :: bind, tôi ràng buộc sigint_cb với hàm_thunk, đúng không? Vì nó thực sự cảm thấy như std :: bind nào. – lppier