Maison  >  Article  >  développement back-end  >  Comment utiliser `std::source_location` avec les fonctions de modèle variadiques en C 20 ?

Comment utiliser `std::source_location` avec les fonctions de modèle variadiques en C 20 ?

DDD
DDDoriginal
2024-11-01 02:13:02884parcourir

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

Résoudre les problèmes d'emplacement source dans les fonctions de modèle variadiques

En C 20, la capture des détails du contexte d'appel de fonction est rendue possible avec std::source_location. Cependant, son utilisation avec des fonctions de modèle variadiques s'est avérée difficile en raison du positionnement du paramètre source_location.

Le problème de position

Invariablement, les paramètres variadiques habitent la fin du liste de paramètres. Cela a entravé l'utilisation de std::source_location pour les raisons suivantes :

  • Première tentative :

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

    échoue car les paramètres variadiques doivent résider à la fin.

  • Deuxième Tentative :

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

    introduit une ambiguïté pour les appelants car elle introduit un paramètre inattendu.

Solution : adopter des guides de déduction

La forme initiale peut être revitalisée en introduisant une déduction guide :

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

Cela permet des appels tels que :

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

Conclusion :

Grâce à l'utilisation de guides de déduction, les programmeurs C peuvent en toute transparence incorporez std::source_location dans des fonctions de modèle variadiques pour capturer sans effort les informations de contexte d'appel de fonction.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn