Maison > développement back-end > C++ > Comment obtenir le nom du type dans les modèles C ?

Comment obtenir le nom du type dans les modèles C ?

DDD
Libérer: 2024-11-15 08:58:02
original
621 Les gens l'ont consulté

How to Get Type Name in C   Templates?

Obtention du nom du type dans les modèles C

Dans la programmation de modèles C, l'obtention du nom du type en cours de conversion peut être cruciale pour la gestion des erreurs . Considérons une classe de modèle analysant des fichiers de données, où la plupart des erreurs d'analyse proviennent d'erreurs de fichiers de données. Pour fournir des messages d'erreur conviviaux, il est essentiel d'identifier le type de données attendu.

La fonction générique GetValue récupère les valeurs d'une carte de données en fonction des sections et des entrées clés. Lorsque la valeur attendue ne peut pas être convertie en type souhaité, une exception est levée. Cependant, déterminer le nom de type attendu à inclure dans le message d'erreur peut être difficile.

Solution au moment de la compilation

Une solution élégante au moment de la compilation peut être obtenue en utilisant le type introspection et macros prédéfinies. Créez un fichier d'en-tête (types.h) définissant un modèle de fonction GetTypeName.

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

#define DEFINE_TYPE_NAME(type, name) \
    template<>const wchar_t *GetTypeName<type>(){return name;}
Copier après la connexion

Utilisez la macro DEFINE_TYPE_NAME dans les fichiers .cpp pour définir les noms de type pour les types rencontrés dans le processus d'analyse du fichier de données.

DEFINE_TYPE_NAME(int, L"int")
DEFINE_TYPE_NAME(float, L"float")
DEFINE_TYPE_NAME(std::string, L"std::string")
Copier après la connexion

Au sein de la fonction GetValue, récupérez le nom du type en utilisant :

const wchar_t *typeName = GetTypeName<T>();
Copier après la connexion

Cette approche garantit la création d'une erreur d'éditeur de liens si un type non défini est rencontré, incitant l'ajout de la définition de type nécessaire.

Solution alternative utilisant l'identification de type d'exécution (RTTI)

Une solution d'exécution peut être obtenue à l'aide de RTTI :

std::type_info(T).name()
Copier après la connexion

Cependant, cette solution entraîne une surcharge d'exécution, ce qui la rend moins souhaitable pour les utilisateurs fréquemment appelés. fonctions.

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