я использовал std::variate_generator
следующим образом в проекте VS2010:
#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
переехал или был удален?
variate_generators не используются в окончательной стандартной версии <random>
, variate_generator был частью tr1, но так и не вошел в стандарт, поэтому я немного удивлен std::variate_generator
работал в VS2010 (в отличие от std::tr1::variate_genrator
). Я верю, что он все еще существует в пространстве имен tr1 VS2012.
Вместо этого вы можете сделать следующее:
#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.
Других решений пока нет …