Heim > Backend-Entwicklung > C++ > Wie kann man ein Parameterpaket in Variadic-Vorlagen korrekt durchlaufen?

Wie kann man ein Parameterpaket in Variadic-Vorlagen korrekt durchlaufen?

Patricia Arquette
Freigeben: 2024-12-27 16:42:10
Original
566 Leute haben es durchsucht

How to Correctly Loop Over a Parameter Pack in Variadic Templates?

So durchlaufen Sie ein Parameterpaket mithilfe einer Paketerweiterung

Bei der Verwendung verschiedener Vorlagen und Funktionen ist es wichtig, die Verwendung von Paketen zu verstehen Erweiterungen. Betrachten Sie den folgenden Code:

template<typename T>
static void bar(T t) {}

template<typename... Args>
static void foo2(Args... args)
{
    (bar(args)...);
}
Nach dem Login kopieren

Beim Kompilieren schlägt dieser Code mit dem Fehler fehl:

Error C3520: 'args': parameter pack must be expanded in this context
Nach dem Login kopieren

Die Lösung: Pack Expansion in Braced-Init-List

Um dieses Problem zu beheben, können Sie eine Paketerweiterung innerhalb eines verwenden braced-init-list:

template<typename... Args>
static void foo2(Args &&&... args)
{
    int dummy[] = { 0, ( (void) bar(std::forward<Args>(args)), 0) ... };
}
Nach dem Login kopieren

Grundlegendes zur Braced-Init-List

Die Initialisierungsliste innerhalb der Array-Definition erweitert die Paketerweiterung in eine durch Kommas getrennte Datei Liste. Die Umwandlung in void stellt sicher, dass der verwendete Kommaoperator der integrierte ist und keine überladenen Versionen. Dies garantiert eine Auswertung der Paketerweiterung von links nach rechts.

Zusätzliche Optionen mit C 17

In C 17 können Sie den Code mithilfe von Faltausdrücken vereinfachen:

((void) bar(std::forward<Args>(args)), ...);
Nach dem Login kopieren

Fazit

Durch die Nutzung einer Paketerweiterung innerhalb eines Mit braced-init-list oder einem Fold-Ausdruck in C 17 können Sie ein Parameterpaket effektiv durchlaufen und Kompilierungsfehler vermeiden. Das Verständnis dieser Technik ist für die Arbeit mit verschiedenen Vorlagen und Funktionen in C von entscheidender Bedeutung.

Das obige ist der detaillierte Inhalt vonWie kann man ein Parameterpaket in Variadic-Vorlagen korrekt durchlaufen?. 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