cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
91 stars 0 forks source link

Добавить функцию деманглирования имени type_info из boost::core::demangle. #562

Open shiz01 opened 1 year ago

shiz01 commented 1 year ago

Вмержить в стандарт boost::core::demangle, т.к. на данный момент нет какого-либо стандартного способа получить человекочитаемое имя из typeid(T).name().

Достаточно удобно при отладке шаблонов использовать в логах type_info, но без библиотеки boost требуется дополнительное деманглирование.

На данный момент typeid(std::expected<std::vector<std::string>, my_error_t>).name() выведет манглированное имя, которое в логах придётся дополнительно деманглировать при отладке, т.к. трудно однозначно интерпретировать тип. St8expectedISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EE10my_error_tE

При использовании boost::core::demangle, нам не нужна постобработка логов, мы можем сразу получить читаемое имя типа. std::expected<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, my_error_t>

Полезные ссылки:

sergii-rybin-tfs commented 1 year ago

typeid(T).name() Возвращает строку которая не обязательно манглированная. Это может быть и имя типа человекочитаемое, а может быть уникальный ID.

Returns an implementation defined null-terminated character string containing the name of the type. No guarantees are given; in particular, the returned string can be identical for several types and change between invocations of the same program.

Тут я предлагаю nameof #535 даже пару лайков поставили.