我正在编写一个共享库(称为MyLib),它依赖于另一个库(称之为ParentLib)。 ParentLib有一些我在MyLib中实现的虚函数以及其他几个独立的实现。
// MyLib.h
#include <parentlib_library.h>
class Foo : public ClassinParent
{
public:
void DefinitionofParentLibFunction();
private:
// ...
};
我能够编译并生成MyLib而没有任何问题,但是当应用程序使用MyLib时,我需要包含ParentLib_library.h来编译代码。 我的一个要求是应该完全隐藏应用程序中的ParentLib。我不确定实现这一目标的下一步。 有什么想法吗?
答案 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>