Недавно я читал о DI и IoC на С++. Я немного запутался (даже после прочтения связанных вопросов здесь на SO) и надеялся на некоторое разъяснение.
Мне кажется, что знакомство с STL и Boost приводит к использованию инъекции зависимостей совсем немного. Например, допустим, что я сделал функцию, которая нашла среднее из диапазона чисел:
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;
};
Это (например, использование итераторов вместо доступа к самой коллекции) инъекции зависимостей? Инверсия контроля? Ни?
Посмотрим на другой пример. У нас есть класс:
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_;
};
Это похоже на инъекцию зависимостей. Но это инверсия контроля?
Кроме того, если мне что-то не хватает, может кто-то мне помочь? Это, по-видимому, естественный способ сделать что-то, поэтому, если все это есть для Injection Dependency, почему люди с трудом используют его?