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 }
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) ... }; }
fold Ausdrücke:
((void) bar(std::forward<Args>(args)), ...);
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!