Формат вывода 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, но я нигде не могу его там найти.Есть ли переносимая библиотека, которая делает это?