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

Boost Polygon Library: Overview

Boost , ,


Polygon Library Design Overview

Библиотека Polygon использует шаблонное программирование, вдохновленное C++-Concepts, для обеспечения общих библиотечных функций, перегруженных типом концепции.   В настоящее время в системе типа библиотеки Полигона существует тринадцать концепций. Концептуальный объект в библиотеке Polygon — это просто пустая структура, похожая на тег, который будет использоваться для отправки тегов.    Эти концепции показаны на диаграмме уточнения ниже.

Стрелки между пузырьками диаграмм показывают отношения уточнения концепции.   Это похоже, но не идентично наследственным отношениям между нормальными классами. Уточнение понятия сужает определение более общего понятия.   Например, концепция прямоугольника является усовершенствованием концепции многоугольника, поскольку она ограничивает многоугольник четырехсторонней, параллельной оси, прямолинейной фигурой. Уточнение концепции всегда приемлемо для API, который ожидает, что считывает только доступ к данной концепции, но никогда не приемлемо для API, который ожидает написать к этой концепции.   В библиотеке полигонов есть три типа геометрии: общий случай, случай, ограниченный углами, кратными 45 градусам, и Манхэттенский/ректилинейный случай, где углы ограничены кратными 90 градусам.    Диаграмма уточнения показывает, что 90-градусные понятия являются уточнениями 45-градусных понятий, которые сами являются уточнениями общего случая.   Это позволяет компилятору выбирать между тремя реализациями алгоритмов для выбора лучшего алгоритма для концептуальных типов данных, передаваемых на перегрузку функции, включая гетерогенные комбинации геометрии 90, 45 и общего случая.   Для обеспечения оператора, который выполняет пересечение на любой паре объектов из десяти концептуальных типов, связанных друг с другом посредством уточнения в диаграфе выше, библиотека поддерживает полностью сто различных комбинаций концептуальных типов, но для реализации оператора требуется только три перегрузки (один для 90, один для 45 и один для произвольной угловой версии операции пересечения), поскольку уточнение обобщает реализацию интерфейса.   Таким образом, полностью симметричный, полный и внутренне согласованный API реализуется для обеспечения значимого и правильного поведения для всех комбинаций типов аргументов во всех API, где эти типы имеют смысл.   Например, нет смысла копировать данные из многоугольника в прямоугольник, поэтому попытка сделать это приводит к синтаксической ошибке, в то время как копирование прямоугольника в многоугольник имеет смысл.  присвоить()функция, которая используется для копирования данных геометрии между понятиями, используется для 49 комбинаций понятий, которые имеют смысл, но не для 51 комбинации, которые являются незаконными.   Ошибка синтаксиса, которую вы увидите при попытке незаконного назначения, проста и понятна, потому что использование SFINAE библиотекой для перегрузки общих функций означает, что компилятор не находит соответствующую функцию в случаях, когда перегрузка не предусмотрена.

ошибка: нет функции сопоставления для вызова «назначать (rectangle_data&, polygon_data&)»

С каждой концепцией связана структура признаков, которая обычно должна быть специализирована для данного типа данных, чтобы обеспечить отображение концепции между интерфейсами типа данных и ожидаемым поведением объекта этого типа, требуемым библиотекой.   Библиотека также предоставляет свои собственные типы данных для каждого понятия, которые соответствуют определению характеристик по умолчанию.   Эти типы данных, предоставляемые библиотекой, являются не более чем тупыми контейнерами, которые обеспечивают доступ к своим данным и полагаются на общие функции библиотеки для обеспечения инвариантов и обеспечения полезного поведения, специфичного для их типа геометрии, которые обычно являются функциями-членами типа данных в OO-дизайне.   Типы библиотечных данных соответствуют признакам по умолчанию, связанным с их связанной концепцией геометрии, и регистрируются как модели этой концепции.   Когда тип данных сопоставляется с концепцией через черты, он должен быть зарегистрирован как концептуальный тип в библиотеке, специализируясь на метафункции «геометрия_концепция».   После отображения и регистрации тип данных пользователя может использоваться взаимозаменяемо с типами данных библиотеки в общих бесплатных функциях, которые перегружены концепцией.

Черты для сопоставления типа данных с концепцией разбиваются на изменяемые и считывают только черты.   Прочитайте только черты, которые специализируются на работе с любыми типами, которые являются усовершенствованиями концепции.   Изменяемые черты определяются только для объектов, которые точно моделируют концепцию. Оба считывают только черты и изменяемые черты, которые должны быть определены для типа, чтобы смоделировать концепцию, но тип может использоваться без определения изменяемых признаков, если с этим типом не используется API, который должен модифицировать объект.   Например, тип треугольника может быть зарегистрирован как полигон_концепция и читать только черты, но не изменяемые черты, определенные для этого типа треугольника.   Это позволило бы передать тип треугольника в любой API, который ожидает ссылки на объект, моделирующий многоугольник.  

Объект, являющийся моделью данного понятия, обычно может рассматриваться как модель любого из его усовершенствований, если он определен во время выполнения, чтобы соответствовать ограничениям этих понятий.   Эта концепция литья осуществляется черезview_as<>()Функция.   Например, если объект полигона 90 концептуального типа имеет четыре стороны, он должен быть прямоугольником и может рассматриваться как прямоугольник со следующим синтаксисом:

view_as(polygon_90_object)

Возвратное значениеview_as<>()может быть передан в любой интерфейс, который ожидает объект концептуального типа, указанного в его шаблонном параметре.   Исключением из этой способности к понятию литых геометрических объектов является то, что многоугольники не могут рассматриваться как отдельные многоугольники или прямоугольники.

 
Copyright: Авторское право © Intel Corporation 2008-2010.
License: Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Статья Boost Polygon Library: Overview раздела может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:02:03/0.026391983032227/1