Hallo,
Ich benutze Libevs C ++ Wrapper ev ++. Es gibt dieses Stück Code in ev ++. H, dass ich weiß, wie man als API verwendet, aber nicht vollständig versteht. Ich kann einen Ctrl-C-Beobachter in der Ereignisschleife wie folgt einrichten:
%Vor%wobei die Funktionssignatur von sigint_cb lautet:
%Vor%Kann jemand erklären, warum function_thunk meine Signaturfunktion signt_cb magisch nach
umwandeln kann? %Vor%Was C ++ Zauberei ist das? Vielen Dank.
function_thunk zaubert die Signatur sigint_cb nicht magisch nach void (*cb)(EV_P_ ev_watcher *w, int revents)
, sondern ruft sigint_cb mit korrekt gewichteten Argumenten auf.
Von Anfang an ist funktion_thunk eine Funktionsvorlage, die mit dem Funktionszeiger vom Typ void (*)(watcher &w, int)
instantiiert werden kann.
Wenn Sie also function_thunk<sigint_cb>
irgendwo in Ihren Code schreiben, erstellt der Compiler eine entsprechende function_thunk Instanz, die wie folgt aussieht:
Beachten Sie auch, dass in Ihrem Beispiel ev::sig
und watcher
die gleichen Typen sind, andernfalls würde die Schablonenargumentableitung / -ersetzung für function_thunk fehlschlagen.
Tags und Links c++