Heim > Backend-Entwicklung > C++ > Wie kann ich ein C-Parameterpaket korrekt durchlaufen, um Compilerfehler zu vermeiden?

Wie kann ich ein C-Parameterpaket korrekt durchlaufen, um Compilerfehler zu vermeiden?

Mary-Kate Olsen
Freigeben: 2024-12-17 15:07:09
Original
287 Leute haben es durchsucht

How Can I Correctly Iterate Over a C   Parameter Pack to Avoid Compiler Errors?

Durchlaufen von Parameterpaketen mit Paketerweiterung

In Variadic-Vorlagen ermöglichen Parameterpakete die Übergabe einer flexiblen Anzahl von Argumenten an eine Funktion . Beim Versuch, über ein Parameterpaket zu iterieren, kann ein Compilerfehler auftreten, wenn das Paket nicht ordnungsgemäß erweitert wird.

Beachten Sie den folgenden Code:

template<typename... Args>
static void foo2(Args... args)
{
    (bar(args)...); // Error: parameter pack must be expanded
}
Nach dem Login kopieren

Dieser Code schlägt mit dem Fehler beim Kompilieren fehl „Fehler C3520: ‚args‘: Parameterpaket muss in diesem Kontext erweitert werden.“ Der Grund für diesen Fehler liegt darin, dass die Argumente des Parameterpakets erweitert werden müssen, bevor sie im Bar-Funktionsaufruf verwendet werden können.

Eine Möglichkeit, diese Erweiterung zu erreichen, ist die Verwendung einer geschweiften Init-Liste (Initialisierungsliste in geschweiften Klammern eingeschlossen). Durch Platzieren der Erweiterung in der Initialisierungsliste eines Dummy-Arrays kann der Compiler die erforderliche Erweiterung durchführen.

template<typename... Args>
static void foo2(Args &&&... args)
{
    int dummy[] = { 0, ( (void) bar(std::forward<Args>(args)), 0) ... };
}
Nach dem Login kopieren
Die Initialisierungsliste ermöglicht die Erweiterung des gesamten Pakets, und die Umwandlung in void stellt sicher, dass das Komma Der Operator wird verwendet, unabhängig von überlasteten Operatoren für den Rückgabetyp „bar“.

Ein alternativer Ansatz, der in C 17 eingeführt wurde, ist die Verwendung von

fold Ausdrücke:

((void) bar(std::forward<Args>(args)), ...);
Nach dem Login kopieren
Dieser Code bietet eine präzise und effiziente Möglichkeit, das Parameterpaket zu durchlaufen.

Das obige ist der detaillierte Inhalt vonWie kann ich ein C-Parameterpaket korrekt durchlaufen, um Compilerfehler zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage