Heim > Backend-Entwicklung > C++ > Hauptteil

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

DDD
Freigeben: 2024-11-01 02:13:02
Original
882 Leute haben es durchsucht

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

Beheben von Quellortproblemen in variadischen Vorlagenfunktionen

In C 20 wird die Erfassung von Kontextdetails für Funktionsaufrufe mit std::source_location ermöglicht. Allerdings hat sich die Verwendung mit variadischen Vorlagenfunktionen aufgrund der Positionierung des Parameters „source_location“ als schwierig erwiesen.

Das Positionsproblem

Variadische Parameter befinden sich ausnahmslos am Ende des Parameterliste. Dies behinderte die Verwendung von std::source_location aus folgenden Gründen:

  • Erster Versuch:

    <code class="cpp">template <typename... Args>
    void debug(Args&&... args, const std::source_location& loc = std::source_location::current());</code>
    Nach dem Login kopieren

    fehlschlägt, weil variadische Parameter erforderlich sind am Ende wohnen.

  • Zweitens Versuch:

    <code class="cpp">template <typename... Args>
    void debug(const std::source_location& loc = std::source_location::current(),
             Args&&... args);</code>
    Nach dem Login kopieren

    führt zu Mehrdeutigkeit für Anrufer, da ein unerwarteter Parameter eingefügt wird.

Lösung: Deduktionsleitfäden nutzen

Die ursprüngliche Form kann durch die Einführung eines Abzugs wiederbelebt werden Anleitung:

<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

Dies ermöglicht Aufrufe wie:

<code class="cpp">int main()
{
    debug(5, 'A', 3.14f, "foo");
}</code>
Nach dem Login kopieren

Fazit:

Durch die Verwendung von Ableitungsanleitungen können C-Programmierer dies nahtlos tun Integrieren Sie std::source_location in verschiedene Vorlagenfunktionen, um Kontextinformationen zu Funktionsaufrufen mühelos zu erfassen.

Das obige ist der detaillierte Inhalt vonWie verwende ich „std::source_location' mit Variadic-Vorlagenfunktionen in C 20?. 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
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!