Heim > Backend-Entwicklung > C++ > Hauptteil

Wie verwende ich „std::source_location' in Variadic-Vorlagenfunktionen?

Mary-Kate Olsen
Freigeben: 2024-10-30 19:08:45
Original
976 Leute haben es durchsucht

How to Use `std::source_location` in Variadic Template Functions?

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>
    Nach dem Login kopieren

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>
    Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!