Durchlaufen von Parameterpaketen mit Paketerweiterung
Im bereitgestellten Codeausschnitt beabsichtigen Sie, ein Parameterpaket variabler Länge mithilfe von zu durchlaufen Pack-Erweiterungssyntax. Allerdings schlägt die Kompilierung des Codes mit der Fehlermeldung „Parameterpaket muss in diesem Kontext erweitert werden“ fehl.
Um dieses Problem zu beheben, müssen Sie die Paketerweiterung in einen Kontext platzieren, in dem sie zulässig ist. Ein geeigneter Ort ist innerhalb einer Klammer-Init-Liste. Betrachten Sie den folgenden geänderten Code:
template<typename... Args> static void foo2(Args &&... args) { int dummy[] = { 0, ( (void) bar(std::forward<Args>(args)), 0) ... }; }
So funktioniert es:
Mit dieser Änderung wird der Code erfolgreich kompiliert und das Parameterpaket durchlaufen.
C 17 Fold Ausdrücke
In C 17 können Sie den Code mithilfe von Faltausdrücken vereinfachen:
((void) bar(std::forward<Args>(args)), ...);
Dieser Ausdruck erweitert das Paket und wendet die angegebene Operation an (in diesem Fall der Aufruf von bar( )) von links nach rechts.
Das obige ist der detaillierte Inhalt vonWie kann ich ein C-Parameterpaket mithilfe der Paketerweiterung korrekt durchlaufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!