2016-05-07 12 views
1

Hier ist ein Code-Snippet.Void Pointer und Casting in Funktion Argument

class NetworkRequestChannel { 
public: 
    ... 

    NetworkRequestChannel(const unsigned short _port_number, 
    void * (*connection_handler) (int *)); 
    ... 
private: 
    ... 
} 

Meine Frage ist über das Argument void * (*connection_handler) (int *). Ich habe eine vage Idee, wie man das liest, und es ist wie ein void-Zeiger auf ein Objekt mit dem Namen connection_handler, das dann in einen int-Zeiger umgewandelt wird. Aber ich weiß, das ist mit ziemlicher Sicherheit falsch, und ich bin mir nicht sicher, wie ich es sonst interpretieren soll.

+5

Es ist ein Funktionszeiger, der eine Funktion akzeptiert, die ein einzelnes 'int *' als Argument akzeptiert und einen 'void *' - Wert (eine generische Speicheradresse) zurückgibt. Der Parameter selbst heißt 'connection_handler'. – mukunda

+0

Beachten Sie, dass 'class NetworkRequestChannel' angibt, dass dies C++ und nicht C ist. Die Antwort ist die gleiche, aber der angezeigte Code ist nicht gültig. –

+0

Das ist etwas anderes, worüber ich seit einiger Zeit verwirrt bin. Ich gebe zu, das ist für eine Klasse, weshalb ich versuchte, nicht zu viele Details zu setzen und nur die eine einfache Antwort zu bekommen. Bei allen Aufgaben meiner Professoren handelt es sich jedoch um C-Dateien mit '.C'- und' .H'-Erweiterungen. HE verwendet jedoch Klassen sogar in seinen eigenen vordefinierten Dateien, und das Makefile, das wir erhalten, verwendet 'g ++ -g'. Es ist wie ein C/C++ - Hybrid, den er versucht hat, den ich bis zu diesem Kurs nicht gesehen habe. – UnworthyToast

Antwort

1

Das Argument

void * (*connection_handler) (int *) 

Ist ein Zeiger auf eine Funktion ein Argument vom Typ int* nehmen und für einen Funktionszeiger void*

0

Es ist die Syntax zurück. Der fragliche Parameter akzeptiert eine Funktion, die ein einzelnes int* als Argument akzeptiert und einen void* Wert (eine generische Speicheradresse) zurückgibt.

Sie können mehr darüber lesen here.

(Das ist schon ein alter Artikel, und ich ermutige die Menschen diese Antwort zu kommentieren oder zu ändern, diejenigen aufzuzählen, die modernen C++ Praktiken betonen. Diese Disregard, wenn der Artikel, den ich mit den besten Praktiken auf dem neuesten Stand tatsächlich verbunden ist!)