Abgekürzte Funktionsvorlage vs. Funktionsvorlage mit Weiterleitungsreferenzparameter

8

Was sind die Unterschiede zwischen? Funktionsvorlagen mit Weiterleitungsreferenzparametern

%Vor%

und abgekürzte Funktionsvorlagen ?

%Vor%

Kann ich Universal_func durch auto_fun ersetzen? Ist Universal_func a von auto_fun oder sind sie gleich?

Ich habe das folgende Programm getestet. Es scheint, dass beide gleich sind.

%Vor%

Universal_func und auto_fun abgeleitet und zu ähnlichen Funktionen erweitert.

%Vor%

Gibt es Unterschiede? Was sagt der Standard?

    
Ajay yadav 21.01.2016, 08:34
quelle

1 Antwort

10

auto in Funktionsparametern ist noch nicht Teil von Standard C ++, aber einige neuere Versionen von GCC erlauben dies als eine Erweiterung als Teil ihrer Unterstützung für die Konzepte TS.

Der Concepts TS bezieht sich auf dieses Konstrukt als eine abgekürzte Funktionsvorlage (obwohl es früher als generische Funktion bekannt war, was meiner Meinung nach ein zu allgemeiner Begriff war) . Die Regeln sind vielleicht zu groß, um sie in diese Antwort zu schreiben, aber schauen Sie in [dcl.fct]/16-19 in dieser Entwurf für alle blutigen Details.

Absatz 16 bietet einen guten Überblick:

  

Eine abgekürzte Funktionsvorlage ist eine Funktionsdeklaration, deren Parameter-Typ-Liste enthält   ein oder mehrere Platzhalter (7.1.6.4). Eine abgekürzte Funktionsvorlage entspricht einer Funktion   Template (14.6.6), dessen Template-Parameter-Liste einen erfundenen Template-Parameter enthält   jedes Auftreten eines Platzhalters in der Parameter-Deklarations-Klausel, in der Reihenfolge ihres Auftretens,   gemäß den folgenden Regeln. [Anmerkung: Template-Parameter werden auch erfunden, um die   Typ einer Variablen oder der Rückgabetyp einer Funktion, wenn der deklarierte Typ Platzhalter enthält   (7.1.6.4.1). - Endnote]

Nach den Regeln in diesem Entwurf sind Ihre beiden Definitionen funktional gleichwertig.

Wir nehmen die Funktion mit einem Platzhalterparameter:

%Vor%

Und erfinde einen Template-Parameter, um ihn zu ersetzen:

%Vor%

Wie Sie sehen, hat dies die gleiche Signatur wie Ihre Funktion ohne Platzhalter:

%Vor%     
TartanLlama 21.01.2016, 08:54
quelle