我正在Visual Studio 2008中編寫一個C++靜態庫A.lib。在我的靜態庫中,我使用了由另一個靜態庫B.lib(.lib)公開的幾個API。Visual C++靜態庫
我寫了一個使用A.lib的應用程序。由於A.lib中的少量頭文件使用B.lib中的頭文件,因此我的應用程序需要B.lib頭文件的路徑。如何避免我的應用程序,以便我不需要提供用於編譯的B.lib頭文件的路徑?
我正在Visual Studio 2008中編寫一個C++靜態庫A.lib。在我的靜態庫中,我使用了由另一個靜態庫B.lib(.lib)公開的幾個API。Visual C++靜態庫
我寫了一個使用A.lib的應用程序。由於A.lib中的少量頭文件使用B.lib中的頭文件,因此我的應用程序需要B.lib頭文件的路徑。如何避免我的應用程序,以便我不需要提供用於編譯的B.lib頭文件的路徑?
避免在庫的接口中使用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.
有了工廠,你的應用程序現在使用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
};
您可以轉到設置並將目錄添加到其他包含目錄,並且您可以按名稱使用標題。