Maison >développement back-end >C++ >Comment récupérer les noms de types dans la métaprogrammation de modèles pour les messages d'erreur informatifs ?
Lorsque vous travaillez avec des classes de modèles génériques, il devient souvent nécessaire d'extraire le nom du type en cours de modélisation. Ces informations peuvent être utiles pour fournir des messages d'erreur informatifs, tels que ceux liés à l'analyse des fichiers de données.
Dans le cas de l'analyse des fichiers de données texte, une exigence courante est de fournir aux utilisateurs avec des messages d'erreur détaillés qui incluent le type de données attendues. Par exemple, un message d'erreur pourrait être le suivant :
Error parsing example.txt. Value ("notaninteger") of [MySectiom]Key is not a valid int
La fonction modèle fournie ci-dessus (GetValue) récupère les noms de fichiers, de sections et de clés à partir des arguments transmis à la fonction modèle et aux variables membres de la classe. Cependant, déterminer le type de données attendues s'avère problématique.
Pour résoudre ce problème, une solution au moment de la compilation est souhaitée. Cela élimine toute surcharge d'exécution lors de la création de la fonction de modèle, ce qui est crucial puisque la fonction est appelée fréquemment et que les temps de chargement sont déjà quelque peu longs.
La solution consiste à exploiter l'expression typeid(T).name(), où typeid(T) renvoie un objet std::type_info. Cela fournissait le nom du type sous forme de tableau de caractères constant. Le segment de code mis à jour ressemble à ceci :
{ 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);} // throw error with the typename provided catch(...)throw ParseError(file, section, key, it->second, typeid(T).name()); } }
Cette solution résout efficacement le défi de la récupération du nom du type modélisé, permettant la fourniture de messages d'erreur informatifs lors de l'analyse du fichier de données.
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!