让我们说在C ++中我在共享库中有一个API,我希望在初始化时注入一些依赖。我怎么能这样做?
例如,在调用代码中:
#include "CTest1.h"
#include "CTest2.h"
...
#include "CTest15.h"
class CTest{
int att1;
int att2;
}
并在共享库中:
#include "CTest.h"
class export CSharedObject{
void create(CTest* test){ mtest = test; }
void doSomething(){ int sum = test->att1+test->att2; }
CTest* mtest;
}
如何在CSharedObject中注入CTest?只是包括?但是CSharedObject将需要CTest所需的所有文件
我需要避免所有这些包括
答案 0 :(得分:1)
首先,你的类需要一个接口:
class CTestIface
{
virtual ~CTestIface(){}
virtual void foo() = 0;
};
然后在库中添加一个实现:
class CTest1 : public CTestIface
{
void foo(){ /*...*/ }
};
和c用于创建/删除CTest11类型的对象:
extern C{
void* Create() { return new CTest1; };
void Delete( void* o ) { delete( (CTest1*) o ); }
}
如您所见,您只需要一个定义接口的标题,以及创建/删除对象的函数。
顺便说一句,在测试中,你应该使用模拟类(继承自接口)