隐藏包括父库

时间:2013-10-15 07:21:56

标签: c++ inheritance shared-libraries

我正在编写一个共享库(称为MyLib),它依赖于另一个库(称之为ParentLib)。 ParentLib有一些我在MyLib中实现的虚函数以及其他几个独立的实现。

// MyLib.h
#include <parentlib_library.h>

class Foo : public ClassinParent
{
   public:
      void DefinitionofParentLibFunction();
   private:
      // ...    
};

我能够编译并生成MyLib而没有任何问题,但是当应用程序使用MyLib时,我需要包含ParentLib_library.h来编译代码。 我的一个要求是应该完全隐藏应用程序中的ParentLib。我不确定实现这一目标的下一步。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果你的声明用于回调或从3dparty lib实现接口 - 那么没办法。在所有其他情况下,我通常采用以下3种方法。

1)使用聚合。将ClassInParent声明为forward并用作Foo的成员:

 class ClassInParent;//forward declare
 class Foo
 {
    ClassInParent* _inst; //use either pointer of reference to external
 public:
     void method_of_ClassInParent() //make facade for parent methods if needed
 }

2)将您的类分成接口(不依赖于ClassInParent)和实现(不通过#include公开)

你的Foo.h:

class Foo
{
public:
   virtual void do_smth() = 0;
};

你的Foo.cpp:

#include <parentlib_library.h>
class FooImpl : public Foo, public ClassInParent
{
     void do_smth()
     {//implementation 

3)使用模板。而不是显式继承使用模板:

template <class T>
class Foo : public T
{

稍后在您的代码中Foo<ClassInParent>