0

我正在尝试创建一个随机数生成器对象,该对象将在应用程序的生命周期内存在。我希望有一个名为 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

谢谢!

4

1 回答 1

1

class random_generator

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

 gen_type number_generator(gen, dist); 

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

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

你很高兴像拉里一样main使用

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;

}

顺便说一句,考虑学习如何将实现放在 cpp 文件中,而不是头文件中。

于 2013-10-24T19:19:42.520 回答