Maison > développement back-end > C++ > 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
Libérer: 2024-11-01 02:13:02
original
961 Les gens l'ont consulté

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>
    Copier après la connexion

    é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>
    Copier après la connexion

    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>
Copier après la connexion

Cela permet des appels tels que :

<code class="cpp">int main()
{
    debug(5, 'A', 3.14f, "foo");
}</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal