gpt4 book ai didi

c++ - 为什么随机分布不将引擎作为模板参数?

转载 作者:太空狗 更新时间:2023-10-29 21:24:24 24 4
gpt4 key购买 nike

最近,我正在使用 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();

当然,分布也必须将种子作为参数(给它的构造函数)。当然,我在这里忘记了一些问题/限制。 所以我想知 Prop 体的原因是什么没有把它做成模板参数。

我怀疑这可能是因为发行版不必处理引擎的构造,但这对我来说毕竟不太可能,因为引擎的构造函数除了种子之外不接受任何参数(这将被传递给分发)。

最佳答案

我可以想到两个原因:

  1. 你暗示过:引擎可能需要任意参数给它的构造函数,而发行版不知道如何构建它。大多数(全部?)标准引擎仅采用种子这一事实并不意味着不能采用其他参数。您甚至可以使用任意构造函数参数构建自己的引擎。
  2. 一个引擎对象可以用于许多不同的发行版。实际上,我会说这是使用它的首选方式:只构建一个引擎并根据需要构建尽可能多的发行版。必须构建多个引擎并为它们全部播种的替代方案可能会有些麻烦。

它实际上是一种依赖注入(inject)

关于c++ - 为什么随机分布不将引擎作为模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16256349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com