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
Libérer: 2024-10-29 11:47:02
original
193 Les gens l'ont consulté

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

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

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!

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