【发布时间】:2011-02-08 13:35:51
【问题描述】:
我最近一直在阅读有关 C++ 中的 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_;
};
这看起来像是依赖注入。但这是控制反转吗?
另外,如果我遗漏了什么,有人可以帮助我吗?这似乎是做事的自然方式,所以如果这就是依赖注入的全部内容,为什么人们很难使用它?
【问题讨论】:
-
你读过维基吗?对IoC/DI有很明确的定义en.wikipedia.org/wiki/Inversion_of_control
-
在 C++ 中,我们不做 IoC 或 DI - 我们有自己的自命不凡且名称错误的概念。
-
如果您不小心,您的模板函数可能会被零除。
-
@Shaggy Frog:这是故意的 :)
标签: c++ dependency-injection inversion-of-control