【发布时间】:2016-03-16 22:13:02
【问题描述】:
我们以uniform_int_distribution 为例。在我看来,尽管它存储了一组默认的分布参数,但它实际上是无状态的。像这样设计成函数模板不是更好更方便吗
template <class Engine, class IntType = int>
IntType uniform_int(Engine& engine, IntType a = 0, IntType b = numeric_limits<IntType>::max());
很多时候,我发现自己写了类似的东西
std::uniform_int_distribution<int> uniform_int(a, b);
... = uniform_int(engine);
或者压缩成一行
... = std::uniform_int_distribution<int>(a, b)(engine);
不管怎样,这让人感觉做作和尴尬。有了函数接口,这自然可以做到
... = std::uniform_int(engine, a, b);
如果您愿意,您仍然可以存储一组默认分布参数
auto my_uniform_int = std::bind(std::uniform_int<int>, placeholders::_1, a, b);
我错过了什么吗?
【问题讨论】:
-
我不确定我是否理解您的投诉。您是在问如何将发行版和引擎打包在一起?如果是,那么您可以使用
boost::variate_generator。
标签: c++ c++11 language-lawyer c++-standard-library library-design