Démanteler le résultat de std::type_info::name
La classe type_info en C fournit une méthode pour récupérer le nom d'un type , mais le nom renvoyé est souvent mutilé. Cela rend difficile l’extraction d’informations utiles à partir du nom. Pour résoudre ce problème, nous pouvons utiliser une technique connue sous le nom de démêlage.
Processus de démembrement
Le démembrement consiste à reconvertir le nom mutilé dans sa forme originale lisible par l'homme. Ce processus peut être réalisé à l'aide de la fonction abi::__cxa_demangle() fournie par l'environnement d'exécution C. Cependant, cette fonction n'est disponible que dans certains compilateurs, tels que GCC.
Implémentation pour GCC
Pour GCC, le processus de démantelage peut être implémenté comme indiqué ci-dessous :
#include <typeinfo> #include <cxxabi.h> std::string demangle(const char* mangled_name) { int status = -4; char* demangled_name = abi::__cxa_demangle(mangled_name, NULL, NULL, &status); if (status == 0) { std::string result(demangled_name); free(demangled_name); return result; } return mangled_name; }
Utilisation
Avec le fonction de démembrement en place, vous pouvez récupérer le nom démêlé d'un type comme suit :
std::string demangled_name = demangle(typeid(int).name());
Compilateurs non GCC
Si vous n'utilisez pas GCC, vous Il faudra peut-être trouver une bibliothèque ou une technique alternative pour démanteler les noms de types.
Démêlage automatique des types dans Logging
La technique décrite ci-dessus peut être intégrée aux systèmes de journalisation pour démanteler automatiquement les noms de types, facilitant ainsi la compréhension du contexte d'appel. Cela peut être particulièrement utile à des fins de débogage.
Considérations supplémentaires
Notez que le démantelage n'est pas toujours possible ou pratique, en particulier pour les types complexes ou imbriqués. Dans de tels cas, vous devrez peut-être utiliser d'autres approches pour extraire des informations significatives de l'objet type_info.
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!