2

std::variate_generatorVS2010プロジェクトでは次のように使用しました。

#include <random>
...
using std::variate_generator;
using std::mt19937;
using std::uniform_real_distribution;

typedef mt19937                                     Engine;
typedef uniform_real_distribution<float>            Distribution;
typedef variate_generator< Engine, Distribution >   Generator;  

Generator r( Engine((DWORD)time(NULL)), Distribution(0.0f, 1.0f) ); 

// from now, calling float rnd = r() gave me a random number between 0.0f and 1.0f in rnd.

このコードをVS2012ソリューションに入れましたが、表示されるエラーメッセージはstd::variate_generator、のメンバーではないというものですstd

std::variate_generator移動または削除されましたか?

4

1 に答える 1

4

variate_generatorsは、の最終的な標準バージョンでは使用されません<random>。variate_generatorはtr1の一部でしたが、標準になったことがなかったのでstd::variate_generator、VS2010で動作したことに少し驚いています(ではなくstd::tr1::variate_genrator)。ただし、VS2012のtr1名前空間にはまだ存在していると思います。

代わりに次のことを行うことができます。

#include <random>
#include <functional> // for std::bind
...
using std::mt19937;
using std::uniform_real_distribution;

typedef mt19937                                     Engine;
typedef uniform_real_distribution<float>            Distribution;

auto r = std::bind(Distribution(0.0f, 1.0f), Engine((DWORD)time(NULL)));

// from now, calling float rnd = r() gave me a random number between 0.0f and 1.0f in rnd.
于 2012-12-03T21:17:11.490 に答える