Maison > développement back-end > C++ > Comment récupérer les noms de types dans les modèles C pour les messages d'erreur informatifs ?

Comment récupérer les noms de types dans les modèles C pour les messages d'erreur informatifs ?

DDD
Libérer: 2024-11-16 15:18:03
original
805 Les gens l'ont consulté

How to Retrieve Type Names in C   Templates for Informative Error Messages?

Récupérer le nom du type dans les modèles C

Lors du développement de classes de modèles pour l'analyse des données, vous pouvez rencontrer le besoin de générer des messages d'erreur informatifs en cas d'échec de l'analyse. Pour fournir des messages d'erreur complets, vous devrez peut-être connaître le nom du type vers lequel la fonction de modèle tente de se convertir.

L'extrait de code fourni ci-dessous décrit le code d'origine qui tente de récupérer le nom du type à l'aide de spécialisations. pour les chaînes :

template<typename T> T GetValue(const std::wstring &amp;section, const std::wstring &amp;key)
{
    std::map<std::wstring, std::wstring>::iterator it = map[section].find(key);
    if(it == map[section].end())
        throw ItemDoesNotExist(file, section, key)
    else
    {
        try{return boost::lexical_cast<T>(it->second);}
        //needs to get the name from T somehow
        catch(...)throw ParseError(file, section, key, it->second, TypeName(T));
    }
}
Copier après la connexion

Une solution alternative consiste à utiliser :

typeid(T).name()
Copier après la connexion

La fonction typeid(T) renvoie une instance de std::type_info, qui donne accès au nom du type mutilé de T. La méthode name() de std::type_info renvoie le nom du type démêlé.

En intégrant cette solution dans votre code, vous pouvez modifier le bloc catch comme suit :

catch(...)throw ParseError(file, section, key, it->second, typeid(T).name());
Copier après la connexion

Cette approche offre un moyen plus flexible et plus efficace de récupérer le nom du type sans avoir besoin de spécialisations explicites.

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