Как использовать внедрение зависимостей в разделяемой библиотеке (dll, так)? - PullRequest
2 голосов
/ 16 сентября 2011

Допустим, в 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;

}

Как я могу ввести CTest в CSharedObject? Просто с включенным? Но для CSharedObject понадобятся все файлы, которые нужны CTest

Мне нужно избегать всех этих включений

1 Ответ

1 голос
/ 16 сентября 2011

Во-первых, вашему классу нужен интерфейс:

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 ); }
}

Как видите, вам нужен только заголовок, определяющий интерфейс, и функции для создания / удаления объектов.

кстати, в тестах вы должны использовать фиктивные классы (наследуя от интерфейса)

...