Прохождение действительного некласса в качестве закрывающего типа макрометафункций запроса всегда возвращается ложным, а не вызывает ошибку компилятора.
Прохождение действительного некласса в качестве закрывающего типа макрометафункции BOOST_TTI_MEM_TYPE всегда возвращает тип маркера, а не производит ошибку компилятора.
Метафункции нулевого типа больше не являются частью библиотеки.
Единые общие макро-метафункции теперь используются для интроспекции данных членов, функций членов, статических данных членов, статических функций членов, данных, функций, типов и шаблонов.
Композитные формы макрометафункций теперь складываются в основные макросы.
Метафункция BOOST_TTI_HAS_TYPE принимает необязательный второй параметр шаблона, который может быть лямбда-выражением MPL.
Метафункция BOOST_TTI_MEMBER_TYPE имеет необязательный тип маркера.
TTI был принят в Boost. Это первая итерация изменений, поскольку библиотека готовится для Boost на основе обзора библиотеки и комментариев и предложений конечных пользователей. Для каждой итерации изменений, сделанных на основе комментариев и предложений конечных пользователей, я создам новый номер версии, чтобы конечные пользователи, которые хотят следить за прогрессом библиотеки для Boost, могли знать, что меняется. Я буду ориентироваться на Boost 1.49 для завершения всех изменений и прохождения всех тестов, чтобы TTI был готов к копированию из багажника Boost в выпуск Boost для включения в Boost.
Разрывные изменения
Метафункции Макро больше не генерируются ни в одном пространстве имен, а непосредственно в рамках конечного пользователя.
Макросы, генерирующие класс метафункций, для каждого макроса метафункции были удалены. Конечный пользователь может использовать усилитель::mpl:::quote вместо этого, если он хочет.
Макросы, генерирующие имя метафункции, были упрощены таким образом, что не генерируется имя пространства имен, и для каждого макроса макрометафункций существует одно имя метафункции, генерирующее макрос.
BOOST_TTI_TRAITS_GEN Макро было удалено.
Отдельные имена файлов заголовков изменились, чтобы более точно отражать имена макросов метафункций.
Названия композитной функции-члена и композитных макросов статической функции-члена изменились с BOOST_TTI_HAS_COMP_MEMBER_FUNCTION на BOOST_TTI_HAS_MEMBER_FUNCTION_WITH_SIG От BOOST_TTI_HAS_COMP_STATIC_MEMBER_FUNCTION до BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_WITH_SIG.
Все имена параметров шаблонов теперь уникальны для TTI, чтобы избежать столкновений имен.
Метафункции нулевого типа могут передаваться неклассовым типам как есть.
BOOST_TTI_HAS_MEMBERBOOST_TTI_TRAIT_HAS_MEMBER) изменен наBOOST_TTI_HAS_COMP_MEMBER_FUNCTIONBOOST_TTI_MTFC_HAS_MEMBER] изменен наBOOST_TTI_MTFC_HAS_MEMBER_FUNCTIONBoost_TTI_MTFC_TRAIT_HAS_COMP_MEMBER_FUNCTION. Это семейство функций теперь поддерживает только функции-члены с композитным синтаксисом.
BOOST_TTI_HAS_STATIC_MEMBERBOOST_TTI_TRAIT_HAS_STATIC_MEMBERBOOST_TTI_COMP_MEMBER_FUNCTIONиBOOST_TTI_MTFC_HAS_STATIC_MEMBERBOOST_TTI_MTFC_TRAIT_HAS_STATIC_MEMBERBOOST_TTI_MTFC_COMP_MEMBER_FUNCTIONBOOST_TTI_MTFC_STATIC_MEMBER_FUNCTIONBOOST_TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION. Это семейство функций теперь поддерживает только статические функции-члены с композитным синтаксисом.
Добавлен набор макросов класса метафункций для передачи макрометафункций в виде метаданных. Это дополняет передачу макрометафункций в качестве метаданных с использованием выражений заполнителя.
Библиотека теперь также компилирует с gcc 3.4.2 и gcc 3.4.5.
В документацию были добавлены примеры использования.
В документации вышеупомянутые метафункции вложенного типа теперь называются метафункциями нулевого типа.
BOOST_TTI_HAS_TYPEиboost::tti::mf_has_typeтеперь имеют опциональную проверку типа.
Реализована новая функциональность макрометафункции, которая позволяет рассматривать композитные типы как индивидуальные. К ним относятся:
BOOST_TTI_HAS_MEMBER_DATA
BOOST_TTI_HAS_MEMBER_FUNCTION
BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION
Новая метафункция нулевого типаboost::tti::mf_has_static_member_functionиспользует новую базовуюBOOST_TTI_HAS_STATIC_MEMBER_FUNCTIONМакрометафункция. Его подпись использует необязательную последовательность MPL для типов параметров и необязательный тип тега Boostfunction_types.
Новые метафункции нулевого типаповышаютtti::допустимый_member_typeиповышенныйttitti::ttimf_valid_member_typeдля проверки того, вернулся ли «тип» от вызоваBOOST_TTI_MEMBER_TYPEилиповышенный::ttimf_member_type.
Сложные изменения
BOOST_TTI_TYPE_CHECK_TYPEDEFиboost::tti::mf_has_type_check_typedefбыли удалены, а функциональность в них сложена вBOOST_TTI_HAS_TYPE::mf_has_type.
BOOST_TTI_MEMBER_TYPE и boost::tti::mf_member_type больше не возвращают «действительной» булевой постоянной. Используйте вместо этого метафункции::tti::valid_member_type или boost:::tti::mf_valid_member_type (см. выше).
boost::tti::mf_has_static_functionбыла удалена и ее функциональность была перенесена наboost::tti::mf_has_static_member_function(см. выше).
boost::tti::mf_member_dataиспользует новый базовыйBOOST_TTI_HAS_MEMBER_DATAмакрометафункция.
Подпись дляповышения::tti::mf_has_member_functionизменилась, чтобы использовать необязательную последовательность MPL вперед для типов параметров и необязательное увеличениефункции_типовтипа метки.
Все метафункции нулевого типа принимают свой соответствующий параметр макрометафункции как класс в виде выражения Boost MPL lambda вместо параметра шаблона шаблона, как ранее. Использование экспрессии заполнителя является самым простым способом передачи соответствующей макрометафункции к ее метафункции нулевого типа.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.