Hindernisse bei der Verwendung von std::source_location mit Variadic-Vorlagenfunktionen überwinden
Variadic-Vorlagenfunktionen, eine leistungsstarke Funktion in C 20, ermöglichen die Behandlung einer beliebigen Anzahl von Argumenten. Die Integration von std::source_location, einem Mittel zum Erfassen von Anrufkontextinformationen, mit diesen Funktionen stellt jedoch eine Herausforderung dar.
Die Kollision mit Variadic-Parametern
Variadic-Parameter müssen vorhanden sein am Ende einer Funktionssignatur und stellt ein Hindernis beim Einbinden von std::source_location dar.
Lösung 1: Implementierung eines Abzugsleitfadens
Dieses Problem kann durch die Einführung umgangen werden eine Ableitungsanleitung, die die Aufrufsyntax umwandelt:
<code class="cpp">template <typename... Ts> struct debug { debug(Ts&&... ts, const std::source_location& loc = std::source_location::current()); }; template <typename... Ts> debug(Ts&&...) -> debug<Ts...>;</code>
In diesem Setup bleibt die Funktionssignatur unverändert, während die Ableitungsanleitung die Lücke schließt:
<code class="cpp">int main() { debug(5, 'A', 3.14f, "foo"); // Call converted to debug<int, char, float, const char*> }</code>
Diese Lösung behält die Vorteile bei von std::source_location und gewährleistet eine nahtlose Syntax für verschiedene Vorlagenfunktionen.
Das obige ist der detaillierte Inhalt vonWie können Sie „std::source_location' mit Variadic-Vorlagenfunktionen in C 20 verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!