2010-02-26 151 views
0

我正在Visual Studio 2008中編寫一個C++靜態庫A.lib。在我的靜態庫中,我使用了由另一個靜態庫B.lib(.lib)公開的幾個API。Visual C++靜態庫

我寫了一個使用A.lib的應用程序。由於A.lib中的少量頭文件使用B.lib中的頭文件,因此我的應用程序需要B.lib頭文件的路徑。如何避免我的應用程序,以便我不需要提供用於編譯的B.lib頭文件的路徑?

回答

2

避免在庫的接口中使用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 
}; 
0

您可以轉到設置並將目錄添加到其他包含目錄,並且您可以按名稱使用標題。