Отмена результата std :: type_info :: name - PullRequest
80 голосов
/ 11 ноября 2008

В настоящее время я работаю над кодом регистрации, который, среди прочего, должен печатать информацию о вызывающей функции. Это должно быть относительно просто, стандартный C ++ имеет класс type_info. Он содержит имя класса / функции typeid'd и т. Д. но он покалечен Это не очень полезно. То есть typeid(std::vector<int>).name() возвращает St6vectorIiSaIiEE.

Есть ли способ извлечь из этого что-то полезное? Как std::vector<int> для приведенного выше примера. Если это работает только для не шаблонных классов, это тоже нормально.

Решение должно работать для gcc, но было бы лучше, если бы я мог его портировать. Это для ведения журнала, поэтому не так важно, чтобы его нельзя было отключить, но это должно быть полезно для отладки.

Ответы [ 12 ]

1 голос
/ 11 ноября 2008

Взгляните на __cxa_demangle, который вы можете найти на cxxabi.h.

0 голосов
/ 11 ноября 2008

Я всегда хотел использовать type_info, но я уверен, что результат функции-члена name () нестандартен и не обязательно будет возвращать что-либо, что может быть преобразовано в значимый результат.
Если вы придерживаетесь одного компилятора, возможно, есть специальная функция, которая будет выполнять то, что вы хотите. Проверьте документацию.

...