如何编写函数返回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
*/
答案 0 :(得分:1)
你不能。
显然标准没有看到使其可复制的理由,因为它只是从小输入生成适当的种子序列的临时对象。为什么它不可移动有点可疑,但可能答案与推文的推理相同。
但是有一些解决方法:
使用堆即返回指向种子序列的指针:
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
之前对种子做些什么。为调试目的将它们设置为具体值。