class foo
{
public:
void say_type_name()
{
std::cout << typeid(this).name() << std::endl;
}
};
int main()
{
foo f;;
f.say_type_name();
}
Над кодом отпечатков P3foo на моей машине Ubuntu с г ++. Я не понимаю, почему это печатает P3foo вместо foo. Если изменить код какTypeId() возвращает дополнительные символы в г ++
std::cout << typeid(*this).name() << std::endl;
печатает 3foo.
Любые мысли?
WOW! Интересно. Еще два вопроса .. 1 - C++ filt является частью дистрибутива gcc или частью LINUX? 2 - Есть ли способ получить искаженное имя метода или класса? –
C++ filt является частью binutils (пакет, в котором ld (компоновщик) и другие небольшие utils, такие как readelf, также поступают): http://www.gnu.org/software/binutils/ –
нет способа сделайте это на C++. Однако в GCC существует функция, открытая ABI, которая делает это. Он находится в cxxabi.h и называется __cxa_demangle. просто передайте ему искаженное имя. Его интерфейс следует за этим ABI: http://www.codesourcery.com/public/cxx-abi/abi.html#demangler –