我最近一直在閱讀關於DI和IoC的C++。我有點困惑(即使在閱讀SO的相關問題之後),並希望有所澄清。C++中的Inversion of Control和Dependency injection有什麼區別?
在我看來,熟悉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_;
};
這似乎是依賴注入。但它是否反轉控制?
另外,如果我失去了一些東西,有人可以幫我嗎?這似乎是做事的自然方式,所以如果這就是依賴注入,那爲什麼人們很難使用它?
你讀過維基了嗎?它有一個非常明確的定義IoC/DI http://en.wikipedia.org/wiki/Inversion_of_control – CDSO1 2010-04-15 20:09:25
在C++中,我們不做IoC或DI - 我們有我們自己的自命不凡和嚴重命名的概念。 – 2010-04-15 20:18:04
如果你不小心,你的模板函數可能會被零分。 – 2010-04-15 20:20:37