C ++ Избегание ссылок на библиотеки - PullRequest
4 голосов
/ 19 января 2011

У меня в настоящее время есть настройка c ++, подобная следующей

class FlowController
{
   public:
    //...
   private:
       cntrl::OneWayValve _intake;
}

Как вы можете видеть, я использую экземпляр cntrl :: OneWayValve в своем классе.Класс Valve находится в другой библиотеке, с которой я связываюсь во время компиляции.В своей реализации cntrl :: OneWayValve имеет cntrl :: Value следующим образом.

class OneWayValve
{
   public:
    //...
   private:
       cntrl::Valve _valve;
}

И, как и раньше, cntrl :: Valve находится в другой библиотеке по причинам, которые вам придется спросить у предыдущего разработчика.о.

Теперь, когда я компилирую свой класс FlowController, мне необходимо установить связь с библиотекой OneWayValve и библиотекой cntrl :: Valve.

Мой вопрос: можно ли связать толькос библиотекой cntrl :: OneWayValve во время компиляции?

Форвардное объявление?
Статические библиотеки (правда, не хочу этого делать)?
Еще одна альтернатива?

По сути, я не хочу знать, что он использует cntrl :: Valve для внутреннего использования, это не мое дело.

Примечание: извините, операционная система Unix.

Ура, Бен

Ответы [ 3 ]

1 голос
/ 19 января 2011

Что вы можете сделать, это сделать вашу библиотеку Valve частью своей библиотеки OneWayValve, используя инструмент, называемый библиотекарем. Я не знаю, какую ОС / компилятор вы используете, поэтому я собираюсь описать, как это сделать с помощью Visual Studio, поскольку это единственная система, с которой я на самом деле это делал (если вы не хотите считать CP / M + LIB-80 : -)

Если вы откроете диалоговое окно Инструменты | Параметры для своего проекта OneWayValve и выберете Свойства конфигурации | Библиотекарь | Дополнительные зависимости, вы можете поместить ссылку на свою библиотеку Valve в настройке Дополнительные зависимости. Это приведет к тому, что OneWayValve.lib будет содержать любые объекты, на которые он ссылается из Valve.lib.

0 голосов
/ 19 января 2011

Вы можете сделать это, определив все методы OneWayValve и Valve в их заголовках как встроенные. Тогда вам не нужно ссылаться на библиотеку.

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

0 голосов
/ 19 января 2011

К сожалению для вас, OneWayValve не очень хорошо разработан.Вам не только нужно связать обе библиотеки, но вам также придется перекомпилировать и библиотеку OneWayValve, и ваш код, если класс Valve изменится.

...