Цель библиотеки - предоставить инструменты для создания шаблонных метапрограмм, способных интерпретировать содержимое строки буквально и генерировать код, отображать сообщения об ошибках и т. Д. На основе содержимого строки буквально. Такие метапрограммы называютсяпарсером.с. Метапарс основан напарсерных комбинаторах.
Ключевые компоненты библиотеки:
Представление строки в режиме компиляции. Это инструменты для представления содержимого строки в буквальном смысле, что позволяет шаблонным метапрограммам работать над ними. Для этого библиотека предоставляет класс шаблонов<string>, который является заменой Boost.]<BOOST_METAPARSE_STRING>Макро.
Парсеры. Это классы метафункций шаблонов, которые анализируют префикс строки буквально. Это простыепарсер, обеспечивающие основные строительные блоки для более сложных, выполняющих некоторую полезную работу.
Альтернативой является использование<constexpr>функций вместо шаблонных метапрограмм. Есть определенные вещи, которые трудно (если возможно) использовать<constexpr>функции: построение контейнеров (на время компиляции), длина которых зависит от разборного текста (например, разбор списка JSON), генерирование и проверка типов (например,<printf>).
Почему так много складных парсеров?
Скорость компиляции и потребление памяти являются важной частью библиотек на основе метапрограммирования шаблонов. Пользователи библиотечных интерфейсов, созданных с помощью Metaparse, должны будут платить за это каждый раз, когда они компилируют свой код. Поэтому важно предоставить авторам парсера возможность использовать парсерные комбинаторы с минимальными накладными расходами, в то время как также важно предоставить удобные комбинаторы для начинающих и для случаев, когда это лучший вариант в любом случае.
<repeated>в сочетании с<sequence>,<accept_when>и<transform>могут заменить любой из складывающихся парсеров, однако по стоимости строительства промежуточных контейнеров, которые (обычно) обрабатываются последовательно после этого.
Статья The design of the library раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 22. Boost.Metaparse может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.