2016-11-11 7 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

最小要件は次のとおりです。result_typeは、いくつかの符号なし整数のようなタイプである

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

。これは "UniformRandomBitGenerator"コンセプトです。

ほとんどのC++ <random>ディストリビューションも "RandomNumberEngine"を満たしています。

詳細はcppreferenceまたは標準を参照してください。

+1

minとmaxはconstexpr static result_typeとして宣言して、すべての機能を有効にする必要があります。 –

関連する問題