我最近一直在阅读关于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