虽然我有类似的问题,但我不建议延长生命周期约束。几乎可以肯定的是,针对出现这种情况的情况采用了不同的方法。
也就是说,您可以通过std::mem::transmute
.
文档中的示例(带有警告“这是高级的,非常不安全的 Rust! ”):
struct R<'a>(&'a i32);
unsafe fn extend_lifetime<'b>(r: R<'b>) -> R<'static> {
std::mem::transmute::<R<'b>, R<'static>>(r)
}
Run Code Online (Sandbox Code Playgroud)
你现在描述的情况根本不可能。类型满足特定的生命周期要求,该要求是静态已知的。他们之间不可能有嬗变之类的事情。为了让你的概念T2
存在,T1
必须'static
已经存在。你似乎试图实现的东西是完全不可能的,而且永远都是不可能的。
使用不安全代码可以实现scoped
,但不可能用thread::spawn
. 您可以查看Rust 1.3.0 中的源代码thread::scoped
,了解这是如何完成的。请注意,它thread::scoped
已被删除,因为它存在健全性问题,因此它不是批发复制的完美示例。