Maison > développement back-end > C++ > Comment utiliser `std::source_location` avec les fonctions de modèle variadique ?

Comment utiliser `std::source_location` avec les fonctions de modèle variadique ?

Barbara Streisand
Libérer: 2024-10-31 14:59:02
original
777 Les gens l'ont consulté

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

Utilisation de std::source_location avec des fonctions de modèle variadiques

Problème :

La fonctionnalité C 20 std::source_location fournit informations contextuelles lors des appels de fonction. Cependant, son intégration avec les fonctions de modèle variadique pose des défis en raison de la position fixe des arguments variadiques.

Tentatives infructueuses :

  • Placer source_location comme premier paramètre interfère avec des arguments variadiques.
  • L'insertion de source_location entre des arguments variadiques perturbe les attentes de l'appelant.

Solution utilisant un guide de déduction :

Pour résoudre ce problème , un guide de déduction peut être utilisé :

<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

En spécifiant un guide de déduction, le compilateur peut déduire les types corrects pour la fonction de modèle variadique.

Test :

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

Ce code se compile avec succès et imprime les arguments fournis ainsi que leur emplacement source.

DEMO : [lien fourni dans la question d'origine]

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal