如何将boost随机数生成器的状态存储为const char *?

时间:2014-01-10 18:49:37

标签: c++ c boost random stream

我很难弄清楚如何创建用于c样式代码的生成器内部状态的内存缓冲区。我无法存储对象,因此我需要在编译时知道生成器状态的大小。除了这个提升随机标题之外,我不能使用任何与其相关的提升。我必须坚持使用stl的东西。我尝试使用stringstream但它在遇到空字符后停止。如果我必须编写一个自定义流缓冲区,它需要在下面的函数中内联,我只是不知道如何做到这一点。我的目标是将随机数生成器状态存储在c结构中的恒定大小的内存块中。我发现最简单的解决方案是使用具有易于识别的阵列大小的mersenne twister算法的c实现替换boost。

static boost::mt19937 rngEngine;
static boost::variate_generator<boost::mt19937&, boost::uniform_int<> > generator(rngEngine, boost::uniform_int<>(0, INT_MAX));

const char * getState(void) {
    std::ostringstream content;
    content << rngEngine;
    return content.str().data();
}

1 个答案:

答案 0 :(得分:1)

std::string函数返回getState,它将包含size(或C ++ 03中的length)和嵌入的'\0'个字符

编写的代码是未定义的行为,因为const char*比生成它的字符串更长。