typeid() retourne les caractères supplémentaires dans g++
class foo
{
public:
void say_type_name()
{
std::cout << typeid(this).name() << std::endl;
}
};
int main()
{
foo f;;
f.say_type_name();
}
Code ci-dessus imprime P3foo sur ma machine ubuntu avec g++. Je ne reçois pas pourquoi c'est l'impression P3foo au lieu de simplement foo. Si je change le code comme
std::cout << typeid(*this).name() << std::endl;
il imprime 3foo.
Toutes les pensées?
Vous devez vous connecter pour publier un commentaire.
Parce que c'est un pointeur à toto. Et toto a 3 caractères. Ainsi, il devient
P3foo
. L'autre est de typefoo
, de sorte qu'il devient3foo
. Notez que le texte est dépendant de l'implémentation, et dans ce cas GCC vous donne juste l'interne, déformés nom.Entrer déformés nom dans le programme
c++filt
pour obtenir le unmangled nom:std::type_info::name()
renvoie une mise en œuvre spécifique de nom. Autant que je sache, il n'existe pas de portable de façon à obtenir un "bon" nom, bien que GCC a un. Regardezabi::__cxa_demangle()
.solution serait de faire un modèle de hack pour le retour de tous harcoded type de noms comme
char*
de la plate-forme n'ont pas
#include <cxxabi.h>
?whoami()
méthode) un "modèle hack" ne peut sortir d'un statique type, pas le dynamique un (envisager un pointeur vers polymorphe de la classe de base).