views:

151

answers:

2

I am writing a c++ static library A.lib in visual studio 2008. In my static library, I am using few APIs exposed by another static library B.lib(.lib).

I have a written an application that uses A.lib. Since few header files in A.lib are using headers from B.lib, my application wants a path of B.lib header files. How can I avoid my application so that I need not to provide path of B.lib header files for compilation ?

A: 

You can go to settings and add the directory to the additional include directory's and you can just use the header by name.

rerun
+2  A: 

Refrain from using types from B-headers in the interface of your library. A good way of totally hiding the implementation is using the factory-pattern along with pure abstract base classes as interfaces. You will still have to link B.lib in your application though.

Sample Before:

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

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

This in your header adds a dependency to B.

With Factory, your application now uses IFoo.h instead of 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
};
Space_C0wb0y