Description
Это помощник макро для создания правильных симпатичных имен () с RTTI off.
BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING Макро может быть '(begin_skip, end_skip, runtime_skip, runtime_skip_until)' с параметрами для добавления поддержки компиляторов, которые по умолчанию не признаются библиотекой TypeIndex.
Пример:
Представьте себе ситуацию, когда
boost::typeindex::ctti_type_index::type_id<int>().pretty_name()
возвращает следующую строку:
"static const char *boost::detail::ctti<int>::n() [T = int]"
и
boost::typeindex::ctti_type_index::type_id<short>().pretty_name()
возвращает следующее:
"static const char *boost::detail::ctti<short>::n() [T = short]"
Как мы можем видеть, первые 39 символов являются «статичными запорами char *boost::detail::ctti<», и они не зависят от типа T. После первых 39 символов у нас есть человеческое читаемое имя типа, которое дублируется в конце строки. Стринг всегда заканчивается на ''', который потребляет 1 символ.
Теперь, если мы определим BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING
к (39, 1, ложно, "")
мы получим
"int>::n() [T = int"
для boost::typeindex::ctti_type_index::type_id().pretty_name()
и
"short>::n() [T = short"
для boost::typeindex::ctti_type_index::type_id().pretty_name()
.
Теперь нам нужно позаботиться о персонажах, которые идут до последнего упоминания нашего типа. Мы сделаем это, сказав макросу, что нам нужно отрезать все, что происходит до того, как «Т =», включая «Т =»:
(39, 1, true, "T = ")
В случае командной строки GCC или Clang необходимо добавить следующую строку при компиляции всех источников:
-DBOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING='(39, 1, true, "T = ")'
Дополнительные сведения см. в разделе RTTI.