Добро пожаловать в библиотеку интроспекции признаков роста, сокращенно TTI.
TTI - это библиотека, которая предоставляет возможность интроспектировать по имени элементы типа во время компиляции.
TTI работает через макросы, генерирующие метафункции. Метафункции — это шаблоны классов определенного синтаксиса, имеющие вложенный элемент «типа». Таким образом, где бы ни появлялись шаблоны классов C++, можно использовать макросы TTI. Метафункции, генерируемые TTI, не отличаются от любой другой метафункции, определенной библиотекой Boost MPL.
Метафункции, генерируемые TTI, используются для интроспекции элементов типа во время компиляции, всегда переходя по крайней мере к каждой метафункции.
Название библиотеки было выбрано потому, что библиотека предлагает функциональность компиляции времени по типу, аналогичную библиотеке черт типа Boost, и потому, что функциональность, которую предлагает библиотека, - это способность интроспектировать тип о существовании определенного элемента в этом типе.
Я использую слово «интроспективный» в очень широком смысле. Обычно интроспекция компьютерного языка означает первоначальное требование вернуть информацию по имени, которое затем может быть использовано для интроспекции более конкретной информации. В библиотеке TTI всегда нужно знать и предоставлять имя, а также использовать функциональность, предусмотренную для правильного типа внутреннего элемента, чтобы узнать, существует ли эта конкретная именованная сущность.
Вы можете предпочесть термин «запрос» вместо «интроспекция» для обозначения того, что делает эта библиотека, но я использую терминологию, основанную на слове «интроспекция» во всей этой документации.
Функциональность библиотеки можно суммировать следующим образом:
- Предоставьте средства для интроспекции типа во время компиляции с использованием набора макросов. Каждый макрос берет название элемента типа и генерирует метафункцию, которая впоследствии может быть вызвана, чтобы определить, существует ли элемент внутри типа. Эти сгенерированные метафункции в документации будут называться «макрометафункциями».
- Предоставьте средства для создания типдефа для типа, который может не существовать. Этот тип можно использовать в качестве типа в метафункциях библиотеки без ошибок компиляции.
Библиотека зависит от Boost PP, Boost MPL, Boost Type Traits и Boost Function Types.
Библиотека также зависит от вариадной макроподдержки библиотеки Boost PP, если используются вариадные макросы в библиотеке.
Библиотека — это только библиотека.
Поскольку все зависимости библиотеки являются только библиотеками заголовков, нет необходимости создавать библиотеку для использования библиотеки TTI.
Существует один файл заголовка, boost/tti/tti.hpp
, который включает в себя все файлы заголовка в библиотеке.
Существуют также отдельные файлы заголовков для каждого из элементов, которые будут интроспектироваться библиотекой. Это позволяет интроспектировать более мелкозернистое включение вложенных элементов. Эти файлы заголовков:
Table 1.1. TTI Header Files