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

RTTI emulation limitations

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 38. Boost.TypeIndex 4.1

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

TypeIndex был протестирован и успешно работает на многих компиляторах.

[Warning] Warning

С RTTI могут рухнуть классы с одинаковыми именами, определенными в разных модулях в анонимных пространствах имен:

// In A.cpp
namespace { struct user_defined{}; }
type_index foo_a() { return type_id<user_defined>(); }
// In B.cpp
namespace { struct user_defined{}; }
type_index foo_b() { return type_id<user_defined>(); }
// In main.cpp
assert(foo_a() != foo_b()); // will fail on some compilers

Компиляторы, имеющие такое ограничение:GCC, CLANG, Intel.

Тест:Вы можете проверить эту проблему, запустив<testing_crossmodule_anonymous_no_rtti>, который может быть построен, если вы запустите<../../../b2>в папке<type_index/test/>.

Если во время компиляции произошла следующая ошибка

TypeIndex library could not detect your compiler.
Please make the BOOST_TYPE_INDEX_FUNCTION_SIGNATURE macro use
correct compiler macro for getting the whole function name.
Define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING to correct value after that.

Затем вы используете компилятор, который не был протестирован в этой библиотеке.

<BOOST_TYPE_INDEX_FUNCTION_SIGNATURE>должен быть определен для компилятора конкретного макроса, который выводитвсюподпись функции, включая параметры шаблона.

Если вывод<boost::typeindex::ctti_type_index::type_id<int>().name()>* возвращает не только<int>, но и много текста вокруг<int>* или вообще не возвращает тип, то вы используете компилятор, который не был протестирован с этой библиотекой, и вам нужно настроить макрос<BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING>.

Вот краткая инструкция:

  1. Получить выход<boost::typeindex::ctti_type_index::type_id<int>().name()>
  2. Определить<BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING>до<(skip_at_begin,skip_at_end,false,"")>, где
    • <skip_at_begin>равно количеству символов до первого появления<int>на выходе
    • <skip_at_end>равно числу знаков после последнего появления<int>на выходе
  3. Проверить, что<boost::typeindex::ctti_type_index::type_id<int>().name_demangled()>возвращается "внутри"
  4. Если он не возвращается<int>, то определите BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING до<(skip_at_begin,skip_at_end,true,"T = ")>, где
    • <skip_at_begin>равно<skip_at_begin>на шаге 2
    • <skip_at_end>равно<skip_at_end>на шаге 2
    • <"T = ">равны знакам, которые прямо перед<int>на выходе.
  5. (необязательно, но настоятельно рекомендуется)создать билетс запросом функции, чтобы добавить свой компилятор в список поддерживаемых компиляторов. Включите параметры, предоставленные<BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING>макрос.

Рассмотрим следующий пример:

<boost::typeindex::ctti_type_index::type_id<int>().raw_name()>возвращает «const char *__cdecl boost::detail::ctti::n(void)». Тогда вы установите<skip_at_begin>на<sizeof("const char *__cdecl boost::detail::ctti<")-1>и<skip_at_end>на<sizeof(">::n(void)")-1>.

#define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING (39, 6, false, "")

Другой пример:

<boost::typeindex::ctti_type_index::type_id<int>().raw_name()>возвращает "static const char *boost::detail::ctti::n() [T = int]". Затем вы установите<skip_at_begin>на<sizeof("static const char *boost::detail::ctti<")-1>и<skip_at_end>на<sizeof("]")-1>и последний параметр макроса на «Т =».

#define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING (39, 1, true, "T = ")

PrevUpHomeNext

Статья RTTI emulation limitations раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 38. Boost.TypeIndex 4.1 может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 38. Boost.TypeIndex 4.1 ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:23:34/0.0069160461425781/0