2014-12-15 6 views
28

Es gibt einige Stack   Overflow-Benutzer, die stark befürworten immer die neue C++ 11 Trailing-Rückgabetyp Konvention beim Schreiben von Funktionen, wie main()->int. Ich kann Vorteile sehen, da es die Notation einheitlich macht. Wenn jedoch ein Funktionszeiger deklarieren, kann ich keine Möglichkeit der Verwendung eines nachlaufRücksEndeFormular finden, können also erklären entwederVerwenden eines Funktionszeigers mit einem abschließenden Rückgabetyp

typedef int(*fp)(int);

oder

using fp = int(*)(int);

für einen Funktionszeiger nimmt eine int und eine int zurückgeben.

Gibt es eine Möglichkeit, die neue Trailing-Return-Syntax bei der Deklaration eines solchen Funktionszeigers zu verwenden? Zum Beispiel, so etwas wie

using fp = (*)(int)->int;

aber diese nicht kompiliert. Wenn nicht, gibt es einen Grund, warum die neue Syntax nicht auf Funktionszeiger anwendbar ist?

Antwort

25

Sie haben auto

using fp = auto (*)(int) -> int; 
typedef auto (*fp)(int) -> int; // alternatively 

Nachgestellte Rückgabetyp Syntax bedeutet, dass Sie die auto vor dem Funktionsnamen, um anzuzeigen, in Gebrauch genommen, dass der Rückgabetyp (oder im Fall von c folgt ++ 14 soll geschlossen werden). Für Funktionszeiger gilt die gleiche Regel, außer dass sie (aus offensichtlichen Gründen) nicht abgeleitet werden kann.

Dies gilt für Funktionen wie gut aber Ihr Beispiel

main() -> int {... } 

ist nicht gültig entweder ohne die vorhergehende auto

+0

Danke, aus irgendeinem Grund vergaß ich über die Notwendigkeit von "Auto" in abschließenden Rückgabetyp Funktionen. Macht Sinn. – vsoftco

+0

Ich habe es herausgefunden :) Vielen Dank, ich werde deine Antwort annehmen, da es 5 Sek. Schneller war :) – vsoftco

13

Sie wollen eine davon abhängig davon, ob Sie using Erklärung oder eine typedef verwenden :

using fp = auto (*)(int)->int; 
typedef auto (*gp)(int) -> int; 
+0

Danke, aus irgendeinem Grund habe ich die Notwendigkeit für 'auto' vergessen. – vsoftco

Verwandte Themen