Формат вывода 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"
Эти функции - это просто примеры, кто-то, кто лучше знает систему типа С++, может, вероятно, разработать лучший API. Меня интересует base()
. Все функции могут вызвать исключение, если RTTI был отключен или был обнаружен неподдерживаемый компилятор.
Это похоже на то, что Boost может реализовать, но я не могу найти его там нигде. Есть ли переносная библиотека, которая делает это?