Как правильно обернуть стороннюю библиотечную структуру? - PullRequest
0 голосов
/ 26 апреля 2011

В моем проекте я использую стороннюю библиотеку, которая постоянно меняется.У меня есть класс-обертка (шаблон Bridge + шаблон Pimpl) для этой библиотеки.Так что ни один из моих источников, кроме реализации оболочки, не видит эту библиотеку.Эта библиотека имеет структуру параметров, например,

struct Options {
  double distance;
  double weight;
  int num_rabbits;
  // etc
};

Я хочу, чтобы эта структура была доступна в модуле GUI, чтобы построить диалог, позволяющий установить эти параметры.Нужно ли создавать для этого структуру оболочки?Например,

struct MP_ThatLibOptions {
  // exact member copy
  double distance;
  double weight;
  int num_rabbits;
  // etc
};

Или я должен напрямую включить этот заголовок структуры в мои источники?

Недостатками оболочки являются: копирование-вставка, дополнительный код для преобразования между структурами.Недостатки прямого включения: нарушение идиомы pimpl.

Может быть, есть другие способы решения этой проблемы?

Также хочу подчеркнуть, что сторонняя библиотека постоянно меняется, поэтомуЯ должен принять мои источники для поддержки каждой новой версии библиотеки.

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Поскольку я использую паттерны Bridge + pimpl, я решил полностью скрыть стороннюю библиотеку.

1 голос
/ 26 апреля 2011

Структура Options, кажется, является частью общедоступного API, а не частной реализацией, которую идиома pimpl предназначена для сокрытия, поэтому может показаться, что вы должны включить заголовок в свои источники.

Если вы сделаете это, единственный код, который может быть поврежден при изменении стороннего кода, - это тот код, который напрямую использует элементы структуры Options, но, по-видимому, когда это изменяется, ваш код должен измениться в любом случае соответствующим образом, так как Похоже, это будет изменение API, так что похоже, что вы покрыты.

...