Heim >Backend-Entwicklung >C++ >Wie funktioniert das Auslassungszeichen (...) in C 11-Variadic-Vorlagen?

Wie funktioniert das Auslassungszeichen (...) in C 11-Variadic-Vorlagen?

Barbara Streisand
Barbara StreisandOriginal
2024-10-30 01:03:28871Durchsuche

How does the ellipsis (...) token work in C  11 variadic templates?

Variadic-Vorlagen und das Ellipsen-Token ("...")

In C 11 ermöglichen Variadic-Vorlagen eine flexible Anzahl von Vorlagen Parameter. Bei der Definition einer Variadic-Vorlage spielt das Auslassungszeichen (...) eine entscheidende Rolle.

Entpacken vs. Packen

Die Position der Auslassungspunkte bestimmt ihre Funktion:

  • Entpacken (rechte Seite): Bei Verwendung auf der rechten Seite eines Ausdrucks entpackt ... ein Vorlagenparameterpaket. Die entpackten Muster, durch Kommas getrennt, ersetzen die Auslassungspunkte im eigentlichen Funktionsaufruf.
  • Packen (linke Seite): Wenn es auf der linken Seite platziert wird, packt ... Argumente in ein Vorlagenparameterpaket. Die gepackten Argumente sind innerhalb der Funktion als einzelne Entität verfügbar.

Beispiel für das Entpacken

Betrachten Sie die folgende variable Vorlagenfunktion:

<code class="cpp">template< class T, class... Args >
unique_ptr<T> make_unique( Args&amp;&amp;... args )
{
    return unique_ptr<T>(new T(std::forward<Args>(args)...));
}</code>

Beim Aufrufen von make_unique mit mehreren Argumenten ermöglichen die Auslassungspunkte (in std::forward(Args>(args)...) der Funktion, eine variable Anzahl von Argumenten zu akzeptieren. Die Auslassungspunkte entpacken das Args-Parameterpaket, was zur Folge hat Folgender erweiterter Ausdruck:

<code class="cpp">std::forward<Arg0>(arg0), std::forward<Arg1>(arg1), ...</code>

Platzierung der Auslassungspunkte in Vorlagen- und Funktionsargumenten

In der Liste der Vorlagenargumente werden die Auslassungspunkte in der Mitte platziert, um anzuzeigen, dass der Parameter Das Paket wird in der Funktionsparameterliste fortgesetzt. Dies liegt daran, dass dem variadischen Parameterpaket möglicherweise zusätzliche Vorlagenparameter (z. B. nicht-variadische Parameter) folgen.

In der Funktionsimplementierung werden die Auslassungspunkte am Ende platziert des Ausdrucks, um das Ende der entpackten Argumente zu markieren. Dadurch wird sichergestellt, dass alle verbleibenden Argumente übergeben werden, ohne in eine einzige Entität gepackt zu werden.

Zusätzliche Anwendungen

Die Auslassungspunkte kann auch in anderen Kontexten verwendet werden, wie zum Beispiel:

  • Erstellen von Arrays mit variadischen Initialisierern
  • Definieren von Klassen, die von mehreren Basisklassen erben (über eine öffentliche Mixins...-Syntax)

Das obige ist der detaillierte Inhalt vonWie funktioniert das Auslassungszeichen (...) in C 11-Variadic-Vorlagen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn