На использование, модификацию и распространение распространяется лицензия Boost Software License, Version 1.0. (См. сопроводительный файл LICENSE_1_0.txt или копию по адресу http://www.boost.org/LICENSE_1_0.txt). */ #include #include namespace gtl = boost::polygon; с использованием усилителя пространства имен::полигон::операторы;
//lets make the body of main from point_usage.cpp // общая функция, параметризованная по типу точки template void test_point() { //constructing gtl point int x = 10; int y = 20; //Point pt(x, y); Point pt = gtl::construct(x, y); assert(gtl::x(pt) == 10); == 20; // a quick primer in isotropic point access typedef gtl::orientation_2d O; using gtl:: HORIZONTAL; O o = HORIZONTAL; assert(gtl::x(pt, o)); o = o.get_perpendicular(); assert(o == VERTICAL); assert(gtl::y(pt) == gtl::get(pt, o)); gtl::set(pt, o, 30); assert(gtl::y(pt) == 30);
//using some of the library functions //Point pt2(10, 30); Point pt2 = gtl::construct(10, 30);
gtl::transformationtr2 = tr.inverse(); assert(tr == tr2); //SWAP_XY является собственным обратным преобразованием gtl::transform(pt, tr2); assert(gtl::equivalence(pt, pt2)); // эти две точки снова равны gtl::move(pt, o, 10); //move pt 10 units in y assert(gtl::manhattan_distance(pt, pt2) == 20); //move pt 10 units in y gtl::move(pt, o.get_perpendicular(), 10); //move pt 10 units in x assert(gtl::manhattan_distance( }
Теперь давайте объявим наш собственный тип точки //Бьярн говорит, что если класс не поддерживает //инвариант, просто используйте структуру. struct CPoint { int x; int y; };
//Там, милый простой... но подождите, он ничего не делает // Как мы используем его, чтобы делать все то, что нужно делать точке?
// Сначала мы регистрируем его как точку с усилителем полигона namespace boost {namespace polygon { template<> структурная геометрия_concept{ typedef point_concept type; };
//Тогда мы специализируемся на чертах точки gtl для нашего типа точки шаблон< struct point_traits< Type_type; Ориентация_2d orient;
&
&nb Все ваши испытания сделаны для вас. Return 0; }
// Теперь вы знаете, как сопоставить тип пользователя с концепцией точки библиотеки // и как написать общую функцию, параметризованную типом точки // с использованием библиотечных интерфейсов для доступа к ней.
Статья Custom Point раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.