Maison >développement back-end >C++ >Comment obtenir les noms de types dans les modèles C pour le rapport d'erreurs d'analyse ?

Comment obtenir les noms de types dans les modèles C pour le rapport d'erreurs d'analyse ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-16 10:30:03536parcourir

How to Obtain Type Names in C   Templates for Parse Error Reporting?

Comment obtenir des noms de types dans les modèles C pour le rapport d'erreurs d'analyse

Lorsque vous rencontrez des erreurs lors de l'analyse de fichiers de données texte, il est crucial de fournir messages informatifs destinés aux non-programmeurs, indiquant le problème et l'emplacement du fichier de données où l'erreur s'est produite. Bien que l'extraction des noms de fichiers, de sections et de clés soit simple, l'obtention du type de données que la fonction de modèle analyse n'est pas immédiatement évidente.

Pour répondre à ce besoin, deux approches peuvent être envisagées :

Identification du type d'exécution avec typeid

catch(...)throw ParseError(file, section, key, it->second, typeid(T).name( ));<br>

Cette approche utilise l'opérateur typeid pour récupérer le nom du type pendant l'exécution. Cependant, cela peut entraîner une surcharge d'exécution si une exception est levée, ce qui n'est pas souhaitable pour le code qui est exécuté fréquemment.

Macros de nom de type au moment de la compilation

Une approche alternative implique de définir des macros de noms de types dans un fichier d'en-tête séparé :

#pragma once
template<typename T> const wchar_t *GetTypeName();

#define DEFINE_TYPE_NAME(type, name) \
    template<>const wchar_t *GetTypeName<type>(){return name;}

Ces macros peuvent être utilisées pour spécifier les noms de types pour tous les types souhaités dans leurs fichiers d'en-tête respectifs. L'éditeur de liens résoudra automatiquement la spécialisation de modèle appropriée en fonction des types définis, ou générera une erreur si un type requis est manquant.

Cette approche au moment de la compilation élimine toute surcharge d'exécution et garantit que tous les noms de types requis sont définis. au moment de la compilation. Cela permet également d'ajouter facilement de nouveaux types à l'avenir.

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