作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很难弄清楚如何创建生成器内部状态的内存缓冲区以用于 C 样式代码。我无法存储对象,所以我需要在编译时知道生成器状态的大小。除了这个 boost 随机 header 之外,我不能使用任何与 boost 相关的东西。我必须坚持使用 STL 的东西。我尝试使用 stringstream,但它在遇到空字符后停止。如果我必须编写一个自定义流缓冲区,它需要在下面的函数中内联,我只是不确定该怎么做。我的目标是将随机数生成器状态存储在 c 结构中的恒定大小的内存块中。我找到的最简单的解决方案是用具有易于识别的数组大小的梅森扭曲算法的 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();
}
最佳答案
从您的 getState
函数返回一个 std::string
,它将具有 size
(或 length
在 C++03 中)和嵌入的 '\0'
字符。
所写的代码是未定义的行为,因为 const char*
比产生它的字符串还长。
关于c++ - 如何将boost随机数生成器的状态存储为const char *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21052088/
我是一名优秀的程序员,十分优秀!