Maison  >  Article  >  développement back-end  >  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
Barbara Streisandoriginal
2024-10-31 14:59:02698parcourir

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>

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>

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!

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