Heim >Backend-Entwicklung >C++ >Wie verwende ich „std::source_location' in Variadic-Vorlagenfunktionen?
Verwendung von std::source_location in Variadic-Vorlagenfunktionen
Bei Nutzung der C 20-Funktion std::source_location zum Erfassen von Kontextinformationen in Variadic-Vorlagen Funktionen stellt es eine Herausforderung dar, zu bestimmen, wo der Parameter „source_location“ platziert werden soll.
Fehlgeschlagene Versuche
Fehlversuche umfassen:
Variadic-Parameter am Ende:
<code class="cpp">template<typename... Args> void debug(Args&&... args, const std::source_location& loc = std::source_location::current());</code>
Dies schlägt fehl, da Variadic-Parameter am Ende stehen müssen.
Parametereinfügung:
<code class="cpp">template<typename... Args> void debug(const std::source_location& loc = std::source_location::current(), Args&&... args);</code>
Dies verwirrt den Aufrufer, was bei der Übergabe regulärer Argumente (z. B. debug(42);) zu einem Fehler führen würde.
Lösung: Abzugsleitfaden
Das Problem kann durch Hinzufügen eines Abzugsleitfadens zum ersten Formular gelöst werden:
<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>
Dieser Abzugsleitfaden leitet die Vorlagenparameter ab auf den Funktionsargumenten, sodass der Parameter „source_location“ am Ende platziert werden kann.
Test und Demonstration
<code class="cpp">int main() { debug(5, 'A', 3.14f, "foo"); }</code>
Live-Demo: https://godbolt.org /z/n9Wpo9Wrj
Das obige ist der detaillierte Inhalt vonWie verwende ich „std::source_location' in Variadic-Vorlagenfunktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!