J'ai lu récemment sur DI et IoC en C++. Je suis un peu confus (même après avoir lu des questions connexes ici sur SO) et j'espérais une clarification.Quelle est la différence entre l'inversion de contrôle et l'injection de dépendance en C++?
Il me semble qu'être familier avec le STL et le Boost conduit à l'utilisation de l'injection de dépendance un peu. Par exemple, disons que je fait une fonction que l'on trouve la moyenne d'une série de chiffres:
template <typename Iter>
double mean(Iter first, Iter last)
{
double sum = 0;
size_t number = 0;
while (first != last)
{
sum += *(first++);
++number;
}
return sum/number;
};
Est-ce (à savoir l'utilisation d'itérateurs au lieu d'accéder à la collection elle-même) d'injection de dépendance? Inversion de contrôle? Ni?
Regardons un autre exemple. Nous avons une classe:
class Dice
{
public:
typedef boost::mt19937 Engine;
Dice(int num_dice, Engine& rng) : n_(num_dice), eng_(rng) {}
int roll()
{
int sum = 0;
for (int i = 0; i < num_dice; ++i)
sum += boost::uniform_int<>(1,6)(eng_);
return sum;
}
private:
Engine& eng_;
int n_;
};
Cela ressemble à une injection de dépendance. Mais est-ce l'inversion du contrôle?
Aussi, si quelque chose me manque, quelqu'un peut-il m'aider? Cela semble être la façon naturelle de faire les choses, donc si c'est tout ce qu'il ya à l'injection de dépendance, pourquoi les gens ont du mal à l'utiliser?
Avez-vous lu le wiki? Il a une définition très claire de IoC/DI http://en.wikipedia.org/wiki/Inversion_of_control – CDSO1
En C++, nous ne faisons pas IoC ou DI - nous avons nos propres concepts prétentieux et mal nommés. –
Votre fonction de modèle pourrait diviser par zéro si vous ne faites pas attention. –