Формат вывода type_info::name()
зависит от реализации.
namespace N { struct A; }
const N::A *a;
typeid(a).name(); // returns e.g. "const struct N::A" but compiler-specific
Кто-нибудь написал оболочку, которая возвращает надежную, предсказуемую информацию о типе, которая одинакова для всех компиляторов. Несколько шаблонных функций позволят пользователю получить конкретную информацию о типе. Итак, я мог бы использовать:
MyTypeInfo::name(a); // returns "const struct N::A *"
MyTypeInfo::base(a); // returns "A"
MyTypeInfo::pointer(a); // returns "*"
MyTypeInfo::nameSpace(a); // returns "N"
MyTypeInfo::cv(a); // returns "const"
Эти функции являются просто примерами, кто-то, кто лучше знает систему типов C++, вероятно, мог бы разработать лучший API. Меня интересует base()
. Все функции вызовут исключение, если RTTI отключен или обнаружен неподдерживаемый компилятор.
Это похоже на то, что может реализовать Boost, но я нигде не могу найти его. Есть ли портативная библиотека, которая делает это?
""
для всех типов, но на практике большинство реализаций возвращают что-то непосредственно используемое, а те, которые не возвращают искаженное имя, которое можно разобрать.) - person James Kanze   schedule 12.12.2011type_info
. - person paperjam   schedule 13.12.2011