如何编写函数返回 std::seed_seq
对象?
下面的代码不起作用。
std::seed_seq f(){
return {0};
}
std::seed_seq s = f(); /* error C2280:
'std::seed_seq::seed_seq(const std::seed_seq &)':
attempting to reference a deleted function
*/
最佳答案
你不能。
显然,标准没有看到使其可复制的理由,因为它只是一个临时对象,用于从小输入中生成正确的种子序列。为什么它不可移动有点值得怀疑,但答案可能与拷贝的推理框架相同。
但是有一些解决方法:
使用堆,即返回指向种子序列的指针:
auto seq = std::make_unique<std::seed_seq> (/*...*/); // ... return seq;
生成后,无需返回
std::seed_seq
对象本身,只需将其内容复制到另一个存储中即可。std::seed_seq seq (/*...*/); // ... std::vector<std::seed_seq::result_type> seeds (seq.size ()); seq.param (seeds.begin ());
相反。将输入存储到
std::seed_seq
中。这就是我最后所做的。您是否保留已存储的内容或将要存储的内容并没有真正的区别 - 标准保证了这一点。只是您可以决定在将种子传递给 std::seed_seq 之前对它们进行一些操作,例如将它们设置为具体值以进行调试。
关于c++ - 如何从函数返回 std::seed_seq 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43393052/