将boost随机代码转换为类对象

时间:2013-10-24 18:57:59

标签: c++ boost random

我正在尝试创建一个随机数生成器对象,该对象将在应用程序的生命周期中存在。我希望有一个名为number_generator()的公共接口函数,它应该在调用时返回一个随机数。

请注意下面的main()函数编译得很好,产生了很好的随机数,但是底部是我无法工作的类:

#include <boost/random.hpp>
#include <iostream> 
#include <ctime> 

int main(int c, char** argv) 
{
  // Define a uniform random number distribution of integer values between MIN and MAX
  const int MIN = 1; 
  const int MAX = 2147483648;

  typedef boost::uniform_int<> distribution_type; 
  typedef boost::variate_generator<boost::mt19937&, distribution_type> gen_type; 

  distribution_type dist(MIN, MAX); 
  boost::mt19937 gen; 
  gen_type number_generator(gen, dist); 
  gen.seed(static_cast<unsigned int>(std::time(0)));  // seed with the current time 

  // output random ints
  for (int i=0; i<50; i++) 
    std::cout << number_generator() << std::endl;

}

这是问题所在,由于C ++知识有限,我无法获得number_generator()的公共接口:

#ifndef _random_generator_H_
#define _random_generator_H_

#include <boost/thread/thread.hpp>
#include <boost/random.hpp>

#include <ctime> 

class random_generator
{
public:
  random_generator() /* : MIN(1), MAX(2147483648)*/
  {
    distribution_type dist(MIN, MAX); 
    boost::mt19937 gen; 

    gen_type number_generator(gen, dist); 
    gen.seed(static_cast<unsigned int>(std::time(0)));  // seed with the current time 
  }
private:
  // define a uniform random number distribution of integer values between MIN and MAX
  int MIN; 
  int MAX;

  typedef boost::uniform_int<> distribution_type; 
  typedef boost::variate_generator<boost::mt19937&, distribution_type> gen_type; 

};

#endif

谢谢!

1 个答案:

答案 0 :(得分:1)

class random_generator

在构造函数中初始化生成器:

 gen_type number_generator(gen, dist); 

然后立即忘掉它。 如果您想记住,请将其设为成员变量。

class random_generator
{
    //...
    private:
    //...
    gen_type number_generator;
};

您在main使用

时对Larry感到高兴
std::cout << number_generator() << std::endl;

所以,在课堂上放一个合适的成员:

class random_generator
{
    public:
    //...
    int next()
    {
        return number_generator();
    }

    private:
    //...
    gen_type number_generator;
};

然后你可以在main中使用它:

//relevant includes

int main(int c, char** argv) 
{
  random_generator numbers;
  // output random ints
  for (int i=0; i<50; i++) 
    std::cout << numbers.next() << std::endl;

}

BTW考虑学习如何将实现放在cpp文件中,而不是标题。