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 &section, const std::wstring &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)); } }
Une solution alternative consiste à utiliser :
typeid(T).name()
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());
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!