Запись преобразований обычно является единственным способом, если в рассматриваемых библиотеках нет интерфейсов адаптера. Любые адаптеры, которые вы сделаете сами, в конечном итоге должны быть преобразованы в собственное представление библиотеки для выполнения любых алгоритмов по геометрии.
Другой вариант - создать класс-обертку, который кэширует каждое различное представление A / B / C, так что вам нужно выполнить преобразование в любую заданную библиотеку только один раз для каждого элемента геометрии. И тогда весь ваш код имеет дело только с классом-оберткой и просто передает соответствующее представление любым соответствующим алгоритмам. Перевод может быть выполнен точно в срок, прежде чем он действительно понадобится.
Если вы работаете на языке с typedefs и / или nampespaces, создание ваших собственных typedefs для каждого типа многоугольника библиотеки может облегчить вашу жизнь. Например, если каждая библиотека имеет свой тип многоугольника с именем «Многоугольник», но она помещается в определенное пространство имен, тогда:
typedef A::Polygon APolygon;
typedef B::Polygon BPolygon;
typedef C::Polygon CPolygon;
Если библиотеки действительно имеют конфликт имен, то это реальная проблема.