2016-11-11 48 views
0

是否可以创建除<random>库之外的自定义分配?我想提出一个行为(接口)分布像创建与C++ 11兼容的自定义分布随机报头

std::uniform_int_distribution 
std::normal_distribution 
...etc 

我的意思是,我想这样做以下

std::random_device rd; 
std::mt19937 gen(rd()); 

// Is something like the following possible? 
my_custom_distribution dist; 
dist(gen); 

它看起来像分布必须遵循RandomNumberDistribution概念。是否有可能创建一种与其他公用事业,即发电机和发动机“很好地发挥”的新型分销?

+4

是的,你通过实现符合这个概念的类型来实现分布。是的,这足以使它与发生器和引擎很好地搭配(不需要继承任何东西或类似的东西) – milleniumbug

+0

我不明白为什么不这样做,如果你的类实现了RandomNumberDistribution的每个需求,那么它必须与其他公用事业公司,因为其他所有的公司都有相同的要求。 – Rakete1111

+0

检出许多可用随机分布的来源:http://en.cppreference.com/w/cpp/header/random –

回答

3

的最低要求是:

using result_type = ?; 
result_type operator()(); 
static result_type min(); 
static result_type max(); 

result_type其中一些是无符号整数样型。这是“UniformRandomBitGenerator”概念。

大多数C++ <random>分布也满足“RandomNumberEngine”。

请参阅cppreference或更多细节的标准。

+1

我认为min和max应声明为constexpr static result_type以启用所有需要的功能。 –