Vorteile der auto-im-template-Parameter in C++17
Was sind die Vorteile auto
im template-Parameter, die (möglicherweise) eingeführt werden, die mit C++17?
Ist es nur eine Natürliche Erweiterung von auto
wenn ich will, zu instanziieren template-code?
auto v1 = constant<5>; //v1 == 5, decltype(v1) is int
auto v2 = constant<true>; //v2 == true, decltype(v2) is bool
auto v3 = constant<'a'>; //v3 == 'a', decltype(v3) is char
Was sonst erhalte ich von dieser Sprache-Funktion?
- Als zusätzliche Informationen zu erhalten Deklarieren von non-type template-Argumente mit auto
- Hin und wieder sehe ich Fragen wie diese eine oder diese eine oder diese one auf StackOverflow.
template < auto >
machen diese askers glücklich. - Ich dachte die Haupt-lichtet wurde
std::vector<auto> v{1,2,3,4,5};
und schwierige Dinge wie callable Typen als template-Argumente (esp lambdas). - Nein, das ist nicht das, was es tut. Die
auto
geht auf die definition, nicht der Zeitpunkt der Nutzung. - das ist eine separate Funktion, die Teil der Konzepte TS, aber nicht in C++17. Die p0127 Verwendung von
auto
nicht in Konflikt mit ihm, obwohl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
template <auto>
Funktion (P0127R1) angenommen wurde, in C++ in der ISO-C++ - 2016-meeting in Oulu, Finnland.Einer
auto
Schlüsselwort in einer template-parameter kann verwendet werden, um anzuzeigen, dass ein non-type-parameter der Typ, von dem abgeleitet wird an der Stelle der Instanziierung. Es hilft, zu denken, dies als ein bequemer Weg, zu schreiben:Beispielsweise
kann nun geschrieben werden als
wo Sie nicht explizit ausbuchstabieren, die den Typ nicht mehr. P0127R1 enthält auch einige einfache, aber gute Beispiele, wo mit
template <auto>
mit variadic template-Parameter ist sehr praktisch, beispielsweise für Implementierungen von compile-time-Listen Konstante Werte:In vor-C++1z, während
HomogenousValueList
könnte einfach so geschrieben, wieschreiben ein äquivalent
HeterogenousValueList
wäre nicht möglich ohne die Verpackung der Werte in einigen anderen Vorlagen, zum Beispiel:Eigentlich ist der Fall für echte Werte in mceo ' s (original) Antwort ist ausdrücklich nicht abgedeckt, als nicht-Typ template-parameter.
Siehe das Beispiel in der erwähnten Vorschlag:
Ändern §14.3.2 Absatz 2:
Stolperte über die gleiche Missverständnis, das mich vor ein paar Tagen.
Hier ist ein weiteres Beispiel (ursprünglich präsentiert von @Rakete1111 als Antwort für template template-parameter von unbekannten Art):
Extrahieren Sie den Wert der GRÖßE, ohne zu wissen, seine Art: