Coordinate Concept coordinate_concept Чтобы зарегистрировать определенный тип пользователя как модель концепции координации, специализируйтесь на мета-функции геометрической концепции для этого типа. В приведенном ниже примере CCoordinate регистрируется как модель концепции координации. Шаблон <> геометрия структуры_концепт { typedef coordinate_concept type; }; Тип координат, как ожидается, будет интегральным и встроенным численными типами данных, такими как поплавок и int уже имеют специализацию типов понятий в библиотеке. В координирующих чертах представлены определения типа для соответствующих типов, чтобы позволить библиотеке выбрать лучший тип для кастинга при различных обстоятельствах. Определение координирования_трасс и его специализация для int показаны ниже. template struct coordinate_traits {};
template <>
struct coordinate_traits<int> {
typedef int coordinate_type;
typedef long double area_type;
typedef long long manhattan_area_type;
typedef unsigned long long unsigned_area_type;
typedef long long coordinate_difference;
typedef long double coordinate_distance;
};[ORIG_END] --> Используя координирующие черты int библиотека может избежать переполнения и справиться с обычными проблемами, возникающими при программировании целочисленной геометрии. Для выхода из обычных вопросов существует специальная мета-функция, которая предоставляет библиотеке численный тип, подходящий для точных числовых расчетов. Он по умолчанию для наиболее точного типа данных, доступных в большинстве компиляторов, длинный двойной, но может быть переопределен, специализируясь на конкретном типе координации. Использование многоточных рациональных или аналогичных типов данных gmp рекомендуется для численно надежных расчетов в общих алгоритмах многоугольника. template struct high_precision_type { typedef long double type; }; Существует только одна общая функция по концепциям координат, эвклидовское расстояние. template coordinate_difference euclidean_ distance(coordinate_type_1, coordinate_type_2) Эта функция возвращает абсолютную величину разницы между двумя координатами. Примечание: старые версии stl определяют полностью общую функцию расстояния (T, T) для вычисления разницы между двумя итераторами. Мы были вынуждены назвать нашу дистанционную функцию euclidean_расстояние, чтобы избежать столкновения имен. Алгоритмический C ac_int<128> является примером определенного пользователем типа данных координат, который удовлетворяет концепцию координат. В целом тип данных должен определять std::numeric_limits и быть целоподобным. Типы координат Floating point не поддерживаются всеми алгоритмами и обычно не подходят для использования с библиотекой в настоящее время. |