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.
Gibt es Unterschiede? Was sagt der Standard?
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%Tags und Links c++ templates c++14 template-deduction type-deduction