lisible par l’homme type_info.name ()

J’ai compilé le code suivant avec g++ et obtenu un résultat écrit en commentaires.

 template void foo(T t) { cout << typeid(t).name() << endl; } int main() { foo("f"); //emits "PKc" foo(string()); //emits "Ss" } 

Je sais que type_info.name() n’est pas standardisé, mais existe-t-il un moyen d’obtenir des résultats lisibles par l’homme?

Quelque chose comme ce qui suit serait bien suffisant

 const char * class ssortingng 

Vous pouvez utiliser abi :: __ cxa_demangle pour cela (fonction de demangle prise à partir d’ ici ), mais rappelez-vous que l’appelant est responsable de la libération du retour:

 #include  #include  #include  #include  #include  #include  std::ssortingng demangle(const char* mangled) { int status; std::unique_ptr result( abi::__cxa_demangle(mangled, 0, 0, &status), std::free); return result.get() ? std::ssortingng(result.get()) : "error occurred"; } template void foo(T t) { std::cout << demangle(typeid(t).name()) << std::endl; } int main() { foo("f"); //char const* foo(std::string()); //std::string } 

Exemple sur ideone .