Магия метапрограммирования на примере Boost.Geometry

Разрабатывая своё API, мы стараемся скрывать сторонние используемые библиотеки в реализации, чтобы не усложнять жизнь пользователям дополнительными зависимостями. Для этого приходится писать различные обёртки над библиотечными структурами данных и алгоритмами, делать внутри них конвертацию между форматами, согласовывать интерфейсы, создавать библиотечные объекты на основе наших собственных и выполнять другие избыточные действия. Благодаря своей шаблонной архитектуре библиотека Boost.Geometry способна работать с нашими структурами данных так же эффективно, как и со своими собственными, сводя накладные расходы на адаптацию к минимуму.

Я расскажу о техниках современного метапрограммирования, которые используются в Boost.Geometry и делают возможной интеграцию алгоритмов этой библиотеки c нашими собственными структурами данных.