【问题标题】:Incorporating boost random number generator as a class variable将 boost 随机数生成器合并为类变量
【发布时间】:2013-07-17 05:03:42
【问题描述】:

我正在尝试基于http://www.sitmo.com/article/generating-random-numbers-in-c-with-boost/ 为 boost 随机数生成器创建一个包装类。问题是boost使用模板,我不知道如何将GEN gen的声明与实例化分开,就像将DIST distdist = DIST(0, 1)分开可以做些什么。任何建议表示赞赏。

fr.hpp:

#include <boost/random/variate_generator.hpp>
#include <boost/generator_iterator.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/normal_distribution.hpp>

class FR {

   private:

     typedef boost::mt19937                     ENG;    // Mersenne Twister
     typedef boost::normal_distribution<double> DIST;   // Normal Distribution
     typedef boost::variate_generator<ENG,DIST> GEN;    // Variate generator

     ENG eng;
     DIST dist;
     GEN gen;

   public:
      FR();
};

fr.c:

#include "fr.hpp"

FR::FR() {
  dist = DIST(0, 1);
  gen = GEN(eng, dist);
}

无法编译:

$ g++ -O3 -ggdb3 -Wall -c fr.cpp

fr.cpp: In constructor ‘FR::FR()’:
fr.cpp:3: error: no matching function for call to ‘boost::random::variate_generator<boost::random::mersenne_twister_engine<unsigned int, 32ul, 624ul, 397ul, 31ul, 2567483615u, 11ul, 4294967295u, 7ul, 2636928640u, 15ul, 4022730752u, 18ul, 1812433253u>, boost::random::normal_distribution<double> >::variate_generator()’

【问题讨论】:

  • 在我看来你不需要 boost::normal_distribution 中的双精度 也许可以试试 boost::normal_distribution

标签: c++ boost prng


【解决方案1】:

boost::variate_generator没有default constructor,所以你需要使用你的构造函数的initialization list

FR::FR()
: dist(0,1), gen(eng,dist)
{}

【讨论】:

  • 这个生成器每次调用时是否保证一种唯一的随机性(如 Java 中的安全随机)?在一毫秒内说几个调用,它会返回不同的数字吗?
猜你喜欢
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多