Open shiz01 opened 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 даже пару лайков поставили.
Вмержить в стандарт
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>
Полезные ссылки: