包装一个引擎和分发。
template<class Engine, class Dist>
class variate_generator {
public:
typedef Engine engine_type;
typedef engine-value-type engine_value_type;
typedef Dist distribution_type;
typedef typename Dist::result_type result_type;
variate_generator(engine_type eng0, distribution_type dist0);
result_type operator()();
template<class T>
result_type operator()(T value);
engine_value_type& engine();
const engine_value_type& engine() const;
distribution_type& distribution();
const distribution_type& distribution() const;
result_type min() const;
result_type max() const;
private:
Engine eng; // exposition only
Dist dist; // exposition only
};
参数
Engine
任意引擎的类型。Dist
分发的类型。
备注
模板选件类描述存放一个引擎和分发并传递给 distribution 对象的 operator()的包装引擎对象生成值的对象。
模板参数 Engine 可以是类型 Eng、Eng*或 Eng&,Eng 是引擎。该类型 Eng 是基础引擎类型。类型 Eng 相应的对象是基础引擎对象。
模板中使用一个包装引擎与 distribution 对象所需的值的类型的 engine 对象生成的值的类型。包装引擎的 operator() 返回类型 Dist::input_type的值,生成如下所示:
如果返回 eng()的 Engine::result_type 和 Dist::input_type 是两个整数类型,被强制转换为类型 Dist::input_type。
如果返回 (eng() - eng.min()) / (eng.max() - eng.min())的 Engine::result_type 和 Dist::input_type 是两个浮点类型,被强制转换为类型 Dist::input_type。
如果 Engine::result_type 是整型,它返回 (eng() - eng.min()) / (eng.max() - eng.min() + 1)的 Dist::input_type 是浮点类型,被强制转换为类型 Dist::input_type。
如果 Engine::result_type 是浮点类型,它返回 ((eng() - eng.min()) / (eng.max() - eng.min()) * std::numeric_limits<Dist::input_type>::max()的 Dist::input_type 是integral类型,被强制转换为类型 Dist::input_type。
要求
标头: <random>
命名空间: std
请参见
参考
variate_generator::distribution
variate_generator::distribution_type
variate_generator::engine_type