У меня есть два вопроса:
1.) Я только что нашел поддержку 1.53 в многоугольнике (на http://www.boost.org/doc/libs/1_53_0/libs/polygon) и хотел бы протестировать его, потому что эти функции удивительны для программистов САПР, таких как я.
(Но я не получаю вещи с повторной инициализацией шаблона «http://www.boost.org/doc/libs/1_53_0/libs/polygon/doc/voronoi_basic_tutorial.htm«)
Кто-нибудь знает хороший учебник, который объясняет, почему эта повторная инициализация шаблона необходима и как это сделать правильно. Или как обойтись без этого.
2.) В поисках учебников я нашел много веб-сайтов, работающих с #include «boost / geometry / geometryries / polygon …». Это то же самое, что #include «boost / polygon …». Или boost использует два реализации одного и того же (полигон)?
Или это просто версия?
Спасибо всем, кто может помочь мне разобраться в этом.
С уважением
В Boost есть две библиотеки, которые представляют свои собственные концепции Polygons:
Я не уверен, что вы имеете в виду, говоря «повторная инициализация шаблона». Возможно, вы хотели сказать «специализация шаблона», что иногда требуется для адаптации некоторого класса к Концепции.
Если вам интересно, почему это сделано именно так. Это позволяет вызывать алгоритмы, реализованные в этих библиотеках, передавая объекты некоторых унаследованных классов. Программист должен просто адаптировать эти классы к одной из требуемых концепций, и он может использовать их без преобразования в какой-либо промежуточный объект.
Это очень похоже на то, как черты используются в C ++. Например. когда какой-то новый класс итератора реализуется std::iterator_traits<>
Шаблон может быть специализированным, чтобы определять черты для этого итератора. Это было бы одной из вещей, которые программист должен сделать, чтобы адаптировать этот новый класс итератора к одной из концепций итератора, например, Концепция ForwardIterator. Тогда он мог бы использовать его в алгоритмах STL, таких как std::for_each()
,
Концепции полигонов, представленные этими библиотеками, описаны здесь:
Как правило, библиотеки предоставляют также классы, уже адаптированные к поддерживаемым концепциям. Например. Boost.Geometry обеспечивает boost::geometry::model::polygon<>
(http://www.boost.org/libs/geometry/doc/html/geometry/reference/models/model_polygon.html)
Возможно, можно было бы адаптировать некоторый класс к обеим концепциям и использовать его в обеих библиотеках, но я не уверен в этом.
Других решений пока нет …