最近,我正在编写一个基于策略的课程,使用 C ++ 11的随机数设施。我本来希望能够将stdlib随机分布作为策略传递给我的类(特别是作为模板模板参数)。为了实现这一点,我当然可以创建自己的RandomPolicy
类包装器。但我怀疑我做的事情有些不对劲。
也就是说,它提出了以下问题:为什么随机分布不将引擎类型作为模板参数?相反,我发现引擎将分布作为operator()的参数(而不是模板参数)。 在代码中,您可以写:
std::default_random_engine engine;
std::uniform_int_distribution<int> distribution(0, 9);
int n = distribution(engine);
在代码中,我希望能够写出来:
// std::default_random_engine would be the default template argument though
std::uniform_int_distribution<int, std::default_random_engine> distribution(0, 9);
int n = distribution();
当然,分发也必须将种子作为参数(对于它的构造函数)。 当然,我在这里忘记了一些问题/限制。 所以我想知道具体的原因是什么不使它成为模板参数。
我怀疑这可能是因为发行版不应该处理引擎的构造,但毕竟这对我来说听起来不太可能,因为引擎的构造函数除了种子之外不会接受任何参数(将传递给分发)。
答案 0 :(得分:3)
我可以想到两个原因:
它实际上是依赖注入的一种形式。