Je programme en C++ en utilisant TDD, ce qui suggère d'utiliser l'inversion de contrôle lors de la création d'objets (lors de la création d'objets de certaine classe, passer les objets construits à son constructeur). C'est bien, mais comment puis-je créer des objets requis pour le constructeur?Comment créer un objet requis pour le constructeur de classe en inversion de contrôle?
À l'heure actuelle, j'utilise une usine (que je peux facilement modifier pour mes tests unitaires), qui renvoie un shared_ptr pointant vers l'objet créé. Est-ce la bonne façon, ou existe-t-il de meilleures façons de le faire?
exemple très simplifié montre ce que je fais:
#include <iostream>
struct A {
virtual ~A() { }
virtual void foo() = 0;
};
struct B : A {
virtual ~B() { }
virtual void foo() { std::cout<<"B::foo()"<<std::endl; }
};
struct C {
C(A *a) : a(a) { }
void DoSomething() { a->foo(); }
A *a;
};
int main() {
C c(new B);
c.DoSomething();
}
contre ceci:
#include <iostream>
struct A {
virtual ~A() { }
virtual void foo() = 0;
};
struct B : A {
virtual ~B() { }
virtual void foo() { std::cout<<"B::foo()"<<std::endl; }
};
struct C {
C() : a() { }
void DoSomething() { a.foo(); }
B a;
};
int main() {
C c; // the object of type B is constructed in the constructor
c.DoSomething();
}
EDIT1
This link explique le IoC pour Java, mais comme vous le savez peut-être, en Java, vous pouvez faire quelque chose comme ceci:
class B
{
};
class A
{
public:
A(B b)
...
};
...
A objA(new B); // this doesn't work in c++
...
Tout lien avec le concept d'inversion de contrôle – Chubsdad