Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

demangle

Boost , Chapter 1. Boost.Core , Chapter 1. Boost.Core

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Authors

  • Петр Димов
  • Андрей Семашев

Заголовок<<boost/core/demangle.hpp>>определяет несколько инструментов для неукрашивания имен символов.

namespace boost
{
namespace core
{
    std::string demangle( char const * name );
    char const * demangle_alloc( char const * name ) noexcept;
    void demangle_free( char const * demangled_name ) noexcept;
    class scoped_demangled_name
    {
    public:
        explicit scoped_demangled_name( char const * name ) noexcept;
        ~scoped_demangled_name() noexcept;
        char const * get() const noexcept;
        scoped_demangled_name( scoped_demangled_name const& ) = delete;
        scoped_demangled_name& operator= ( scoped_demangled_name const& ) = delete;
    };
}
}

Функция<boost::core::demangle>является обычным способом получения деманглированного имени символа. Он берет искалеченную строку, такую как те, которые возвращены<typeid(T).name()>на определенных реализациях, таких как<g++>, и возвращает свою распутанную, читаемую человеком форму. В случае, если деманглирование не удается (например, если<name>не может быть интерпретировано как испорченное имя), функция возвращается<name>.

#include <boost/core/demangle.hpp>
#include <typeinfo>
#include <iostream>
template<class T> struct X
{
};
int main()
{
    char const * name = typeid( X<int> ).name();
    std::cout << name << std::endl; // prints 1XIiE
    std::cout << boost::core::demangle( name ) << std::endl; // prints X<int>
}

В некоторых случаях может быть желательным более низкий уровень интерфейса. Например:

  • Предполагая, что деманглинг символов может потерпеть неудачу, пользователь хочет иметь возможность справиться с такими ошибками.
  • Пользователь должен пост-обработать распутанное имя (например, удалить общие пространства имен), и выделение временной строки с полным распутанным именем имеет значительные накладные расходы.

Функция<boost::core::demangle_alloc>выполняет деманглинг имени и возвращает указатель на строку с деманглированным именем, если это удалось, или<nullptr>иначе. Возвращаемый указатель должен быть передан<boost::core::demangle_free>для возврата ресурсов. Обратите внимание, что на некоторых платформах указатель, возвращенный<boost::core::demangle_alloc>, может относиться к строке, обозначенной<name>, поэтому эта строка должна оставаться неизменной в течение всего срока службы возвращаемого указателя.

Класс<boost::core::scoped_demangled_name>является охраной прицела, которая автоматизирует вызовы<boost::core::demangle_alloc>(по его конструкции) и<boost::core::demangle_free>(по разрушению). Струну с распутанным названием можно получить её<get>способом. Обратите внимание, что этот метод может вернуться<nullptr>, если деманглинг не удался.

#include <boost/core/demangle.hpp>
#include <typeinfo>
#include <iostream>
template<class T> struct X
{
};
int main()
{
    char const * name = typeid( X<int> ).name();
    boost::core::scoped_demangled_name demangled( name );
    std::cout << name << std::endl; // prints 1XIiE
    std::cout << (demangled.get() ? demangled.get() : "[unknown]") << std::endl; // prints X<int>
}

<core::demangle>был взят из<boost/exception/detail/type_info.hpp>, который, в свою очередь, был адаптирован из<boost/units/detail/utility.hpp>и<boost/log/utility/type_info_wrapper.hpp>.


PrevUpHomeNext

Статья demangle раздела Chapter 1. Boost.Core Chapter 1. Boost.Core может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 1. Boost.Core ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:05:08/0.0060398578643799/1