Wenn ich den C ++ Standard lese, sehe ich, dass es "Funktion" -Typen und "Zeiger auf Funktion" -Typen gibt:
%Vor%Ich habe nie die Funktionstypen außerhalb von Beispielen gesehen (oder vielleicht habe ich ihre Verwendung nicht erkannt?). Einige Beispiele:
%Vor%Da die Funktionstypen eine Syntax unterstützen, die nicht in C erscheint (Deklaration von Member-Funktionen), sind sie nicht nur ein Teil von C-Baggage, das C ++ aus Gründen der Abwärtskompatibilität unterstützen muss.
Gibt es also irgendeine Verwendung für Funktionstypen, abgesehen von der Demonstration einiger funky Syntax?
Ein Beispiel dafür, warum dies nützlich ist, ist boost , wo Sie das oft sehen. Zum Beispiel in der signals2-Bibliothek:
%Vor%Dabei deklariert das obige Signal ein Signal, das jede Funktion akzeptiert, die zwei Inits benötigt und einen Rückgabewert vom Typ void hat.
Auf der einen Seite scheinen Sie im Allgemeinen über Funktionstypen zu sprechen. Auf der anderen Seite scheint es, dass Ihre Frage in Wirklichkeit die Verwendbarkeit von typedef-Namen für Funktionstypen betrifft.
Die Funktionstypen selbst sind ein grundlegendes Konzept, das in C- und C ++ - Sprachen integriert ist. Sie werden die ganze Zeit benutzt. Du kannst einfach nicht ohne sie leben. Jedes Mal, wenn Sie eine Funktion deklarieren, deklarieren Sie eine Entität des Funktionstyps. Jedes Mal, wenn Sie einen Zeiger auf eine Funktion verwenden, verwenden Sie einen Zeiger auf den Funktionstyp. Etc.
Was die Möglichkeit angeht, typedef-Namen für Funktionstypen zu machen ... sehe ich nicht viel dafür. Es ist, glaube ich, ein Teil von C-Gepäck, das ein wenig für C ++ erweitert wurde, nur weil es einfach zu machen war.
Wie Sie richtig notierten, können typedef-Namen für Funktionstypen verwendet werden, um Elementfunktionen zu deklarieren (und in C ++ können Sie auch const
specifier in typedef einfügen, wie in typedef int MemberType() const;
), aber z. B. nicht Verwenden Sie diese Funktion mit Funktionstypen, die als Vorlagenparameter übergeben wurden.
Tags und Links c c++ function-pointers