class foo
{
public:
void say_type_name()
{
std::cout << typeid(this).name() << std::endl;
}
};
int main()
{
foo f;;
f.say_type_name();
}
Au-dessus de code affiche P3foo sur ma machine ubuntu avec g ++. Je ne comprends pas pourquoi il est en train d'imprimer P3foo au lieu de seulement foo. Si je change le code commetypeid() retourne des caractères supplémentaires en g ++
std::cout << typeid(*this).name() << std::endl;
imprime 3foo.
Des pensées?
WOW! Intéressant. Deux autres questions .. 1 - C++ filt fait partie de la distribution gcc ou fait partie de LINUX? 2 - Y at-il un moyen d'obtenir le nom brouillé d'une méthode ou d'une classe? –
C++ filt fait partie de binutils (le paquet où ld (le linker) et les autres petits utils comme readelf viennent aussi): http://www.gnu.org/software/binutils/ –
il n'y a aucun moyen de faites cela en C++. Dans GCC, cependant, il y a une fonction exposée par l'ABI qui fait cela. C'est dans cxxabi.h et appelé __cxa_demangle. il suffit de passer le nom mutilé. Son interface suit cet ABI: http://www.codesourcery.com/public/cxx-abi/abi.html#demangler –