Visual C ++ статическая библиотека - PullRequest
0 голосов
/ 26 февраля 2010

Я пишу статическую библиотеку c ++ A.lib в Visual Studio 2008. В моей статической библиотеке я использую несколько API-интерфейсов, предоставляемых другой статической библиотекой B.lib (.lib).

У меня написано приложение, которое использует A.lib. Поскольку несколько заголовочных файлов в A.lib используют заголовки из B.lib, мое приложение требует путь к заголовочным файлам B.lib. Как я могу избежать применения, чтобы не указывать путь к заголовочным файлам B.lib для компиляции?

Ответы [ 2 ]

2 голосов
/ 26 февраля 2010

Воздержитесь от использования типов из B-заголовков в интерфейсе вашей библиотеки. Хороший способ полностью скрыть реализацию - использовать factory-pattern вместе с чисто абстрактными базовыми классами в качестве интерфейсов. Вам все равно придется связать B.lib в вашем приложении.

Образец до:

// A.h
#include "B.h"    

class Foo {
public:
    void DoStuff();
private:
    B::Bar Data;  // B::Data comes from library B
};

Это в вашем заголовке добавляет зависимость к B.

В Factory ваше приложение теперь использует IFoo.h вместо A.h:

// IFoo.h
class IFoo {
public:
    static IFoo * CreateInstance( ); // implemented in IFoo.cpp, just returns new Foo

    virtual void DoStuff() = 0;

    virtual ~IFoo() {}
};

// A.h
class Foo : public IFoo {
public:
    virtual void DoStuff();
private:
    B::Bar Data;  // B::Data comes from library B
};
0 голосов
/ 26 февраля 2010

Вы можете перейти в настройки и добавить каталог в дополнительный каталог include, и вы можете просто использовать заголовок по имени.

...