Polygon Sponsor |
Point Concept Тег концепта точки point_concept Чтобы зарегистрировать определенный пользователем тип в качестве модели точечной концепции, специализируйте метафункцию геометрии для этого типа. В приведенном ниже примере CPoint зарегистрирован как модель точки концепции. template <> struct geometry_concept { typedef point_concept type; }; Семантика точки состоит в том, что она имеет координаты x и y. A std::pair, boost::tuple или boost::array — все эти объекты могут быть сделаны моделями точки и интервала в одном и том же блоке компиляции, по очевидной причине, что дублирование специализации структуры геометрии_концепции является незаконным, но также и потому, что это сделает перегрузку общей функции понятием неоднозначным, если тип моделируется более чем одним понятием. Ниже показаны черты точки по умолчанию. Специализация этих черт требуется для типов, которые не соответствуют по умолчанию. template
<typename T>
struct point_traits {
typedef typename T::coordinate_type
coordinate_type;
static coordinate_type get(const T& point,
orientation_2d orient) {
return
point.get(orient);
}
};
template <typename T>
struct point_mutable_traits {
typedef typename T::coordinate_type
coordinate_type;
static void set(T& point, orientation_2d
orient, typename point_traits<T>::coordinate_type value) {
point.set(orient, value);
}
static T construct(typename
point_traits<T>::coordinate_type x_value,
typename point_traits<T>::coordinate_type y_value) {
return
T(x_value, y_value);
}
}; Примерный код custom_point.cpp показывает, как сопоставить класс точек, определенный пользователем, с библиотечным point_concept Functions
template
<typename PointType>
coordinate_type get(const PointType& point,
orientation_2d) |
Ожидает модель точки. возвращает координату точки x или y в зависимости от ориентации_2d. |
template
<typename PointType>
void set(PointType& point, orientation_2d,
coordinate_type) |
Ожидает модель точки. Устанавливает координату точки x или y на координату в зависимости от ориентации_2d значения. |
template
<typename PointType>
PointType construct(coordinate_type x,
coordinate_type y) |
Постройте объект, который является моделью точки, заданной значениями координат x и y. |
template
<typename PointType1, typename PointType2>
PointType1& assign(PointType1& left,
const PointType2& right) |
Копии данных с правого объекта, которые модели указывают на левый объект, который модели указывают. |
template
<typename PointType1, typename PointType2>
bool equivalence(const PointType1& point1,
const PointType2& point2) |
Учитывая два объекта, которые указывают на модель, сравнивают и возвращают истинное, если их значения x и y соответственно равны друг другу. |
template
<typename PointType>
coordinate_type x(const PointType& point) |
Возвращает координату x объекта, на которую указывают модели. |
template
<typename PointType>
coordinate_type y(const PointType& point) |
Возвращает координату x объекта, на которую указывают модели. |
template
<typename PointType>
void x(pPointType& point, coordinate_type ) |
Устанавливает координату x объекта, которую модели указывают на значение координаты. |
template
<typename PointType>
void y(PointType& point, coordinate_type ) |
Устанавливает координату объекта, которую модели указывают на значение координаты. |
template
<typename PointType>
point_type& scale_up(PointType& point,
unsigned_area_type factor) |
Умножает координаты x и y объекта, которые модели указывают на неподписанный фактор. |
template
<typename PointType>
point_type& scale_down(PointType& point,
unsigned_area_type factor) |
Разделяет координаты x и y объекта, которые модели указывают на неподписанный фактор. |
template
<typename PointType, typename scaling_type>
point_type& scale(PointType& point,
const scaling_type& factor) |
Называет функцию масштабирования типа масштабирования на значении x и y объекта, который указывает на модели и устанавливает точку на масштабированные значения. |
template
<typename PointType, typename transform_type>
point_type& transform(PointType& point,
const transform_type& transform) |
Называет функцию члена преобразования типа преобразования на значении x и y объекта, который модели указывают и задают точку преобразованным значениям. |
template
<typename PointType>
point_type& move(PointType& point, orientation_2d,
coordinate_difference displacement) |
Добавляет значение смещения к координате объекта, который моделирует точку, обозначенную ориентацией_2d. |
template
<typename PointType1, typename PointType2>
PointType1& convolve(PointType1& a,
const PointType2& b) |
Добавляет x координата b к x координате a и добавляет y координату b к y координате a. |
template
<typename PointType1, typename PointType2>
PointType1,& deconvolve(PointType1& a,
const PointType2>& b) |
Вычитает x координаты b из x координаты a и вычитает y координаты b из y координаты a. |
template
<typename PointType1, typename PointType2>
distance_type euclidean_distance(
const PointType1&, const PointType2&) |
Возвращает расстояние от объекта, который модели указывают на второй объект, который модели указывают. |
template <typename PointType1, typename PointType2>
coordinate_difference euclidean_distance(
const PointType1&, const PointType2&, orientation_2d) |
Возвращает расстояние от объекта, который модели указывают на координату в заданной ориентации_2d. |
template <typename PointType1, typename PointType2>
coordinate_difference manhattan_distance(
const PointType1&, const
PointType2&) |
Возвращает расстояние в x плюс расстояние в y от объекта, который модели указывают на второй объект, который модели указывают. |
template <typename PointType1, typename PointType2>
coordinate_difference distance_squared(
const PointType1&, const
PointType2&) |
Возвращает квадрат расстояния в x плюс квадрат расстояния в y от объекта, который модели указывают на второй объект, который модели указывают. |
Point Data В библиотеке представлена модель точечной концепции, объявленной template point_data где T - тип координат. Этот тип данных используется внутренне, когда необходима точка, и доступен пользователю библиотеки, который считает удобным использовать тип данных точки библиотеки вместо предоставления своих собственных. Тип данных реализован для удобства использования с библиотечными чертами. Пример кода point_usage.cpp демонстрирует использование библиотеки предоставленных точек данных типа и функций Members
coordinate_type |
T |
point_data() |
По умолчанию строится два значения координат точки. |
point_data(T
x, T y) |
Построение интервала с двумя координатами. |
point_data(const
point_data& that) |
Конструкция копирования |
point_data& operator=(const
point_data& that) |
Оператор назначения. |
template
<typename PointType>
point_data& operator=(const PointType& that) const |
Назначение от объекта, который является моделью точки. |
bool operator==(const
point_data& that) const |
Перегрузка оператора равенства.
|
bool operator!=(const
point_data& that) const |
Перегрузка оператора неравенства. |
bool
operator<(const point_data& that) const |
Сравнивает координаты y и координаты x для разрыва связей. |
bool
operator<=(const point_data& that) const |
Сравнивает координаты y и координаты x для разрыва связей. |
bool
operator>(const point_data& that) const |
Сравнение низких координат и высоких координат для разрыва связей. |
bool
operator>=(const point_data& that) const |
Сравнение низких координат и высоких координат для разрыва связей. |
T get(orientation_2d
orient) const |
Получите координату в заданной ориентации. |
T x() const |
Получите координату в горизонтальной ориентации. |
T y() const |
Получите координату в вертикальной ориентации. |
void set(orientation_2d
orient, T value) |
Устанавливает координату в заданной ориентации на значение. |
void x(T
value) |
Устанавливает координату в горизонтальной ориентации на значение. |
void y(T
value) |
Устанавливает координату в вертикальной ориентации на значение. |
|