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

Comment pouvez-vous utiliser `std::source_location` avec les fonctions de modèle variadique en C 20 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-29 11:47:02188parcourir

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

Surmonter les obstacles à l'utilisation de std::source_location avec les fonctions de modèle variadique

Les fonctions de modèle variadique, une fonctionnalité puissante de C 20, permettent le gestion d'un nombre arbitraire d'arguments. Cependant, intégrer std::source_location, un moyen de capturer des informations de contexte d'appel, avec ces fonctions présente un défi.

La collision avec les paramètres variadiques

Les paramètres variadiques doivent résider à la fin d'une signature de fonction, posant un obstacle lors de l'incorporation de std::source_location.

Solution 1 : Implémenter un guide de déduction

Ce problème peut être contourné en introduisant un guide de déduction qui transforme la syntaxe d'appel :

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

Dans cette configuration, la signature de la fonction reste inchangée, tandis que le guide de déduction comble le fossé :

<code class="cpp">int main()
{
    debug(5, 'A', 3.14f, "foo"); // Call converted to debug<int, char, float, const char*>
}</code>

Cette solution conserve les avantages de std::source_location et garantit une syntaxe transparente pour les fonctions de modèle variadiques.

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