Heim >Backend-Entwicklung >C++ >Wie verwende ich „std::source_location' mit Variadic-Vorlagenfunktionen in C 20?

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

DDD
DDDOriginal
2024-11-01 02:13:02960Durchsuche

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>

    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>

    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>

Dies ermöglicht Aufrufe wie:

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

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!

Stellungnahme:
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