最近,我正在编写一个使用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();
当然,分发也必须将种子作为参数(对其构造函数)。当然,我在这里忘记了一些问题/限制。所以我想知道不将其作为模板参数的具体原因是什么。
我怀疑这可能是因为发行版不应该处理引擎的构造,但这对我来说听起来不太可能,因为引擎的构造函数除了种子之外不接受任何参数(这将是传递给分布)。