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

Customization of Spirit's Attribute Handling

Boost , Spirit 2.5.2 , Advanced

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
Why do we need Attribute Customization Points
[Important]Important

Прежде чем читать дальше, пожалуйста, имейте в виду, что интерфейсы, описанные в этом разделе, не доработаны и могут измениться в будущем, не пытаясь быть обратно совместимыми. Мы в любом случае документируем интерфейсы точек настройки, поскольку считаем их важными. Понимание точек настройки помогает понять Дух. Кроме того, они являются мощными инструментами, позволяющими полностью интегрировать структуры данных пользователя спарсерами Qiи.КармаГенераторы.

Духбыл написан с расширяемостью. Он предоставляет множество различных точек настройки атрибутов, позволяющих интегрировать пользовательские типы данных с процессом анализа в.Spirit.Qiили выходное поколение сДух. Карма. Все точки настройки атрибутов выставляются с использованием аналогичной техники: полной или частичной специализации шаблона.Духобычно реализует основной шаблон, обеспечивая реализацию по умолчанию. Вы, как пользователь, должны предоставить частичную или полную специализацию этого шаблона для типов данных, которые вы хотите интегрировать с библиотекой. Фактически, библиотека использует эти точки настройки, например, для обработки магии типа атрибута<unused_type>.

Вот пример, показывающий точку настройки<traits::container_value>, используемую различными парсерами (такими какKleene,Plusи т. Д.), Чтобы найти тип атрибута, который будет храниться в поставляемом контейнере STL:

template <typename Container, typename Enable/* = void*/>
struct container_value
  : detail::remove_value_const<typename Container::value_type>
{};

Этот шаблон инстанцируется библиотекой в соответствующих местах при использовании поставляемого типа контейнера в качестве аргумента шаблона. Встроенный<type>используется в качестве типа атрибута при разборе элементов для хранения в этом контейнере.

Следующий пример показывает предопределенную специализацию<unused_type>:

template <>
struct container_value<unused_type>
{
    typedef unused_type type;
};

Это означает, что он<type>будет<unused_type>также, таким образом, распространяя статус атрибута «не заботится» на встроенный парсер.

Все точки настройки атрибутов следуют одной и той же схеме. Последний параметр шаблона всегда<typenameEnable=void>позволяет применять SFINAE для тонкозернистого контроля над процессом специализации шаблона. Но большую часть времени можно спокойно забыть о его существовании.

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

The Usage of Customization Points

Различные точки настройки используются различными частями библиотеки. Часть точек настройки используется обоимиSpirit.QiиДух.Карма, в то время как другие специализируются только на одной из подбиблиотек. Мы объясним, когда необходимо реализовать конкретную точку настройки и, что не менее важно, какие точки настройки должны быть реализованы одновременно. Часто недостаточно предоставить специализацию только для одной точки настройки, в этом случае вам, как пользователю, необходимо предоставить все необходимые настройки для вашего типа данных, которые вы хотите интегрировать с библиотекой.


PrevUpHomeNext

Статья Customization of Spirit's Attribute Handling раздела Spirit 2.5.2 Advanced может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Advanced ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 01:31:18/0.0038950443267822/0