摆脱一生的限制?

2024-03-08

我正在尝试编写一个 Rust 函数,它将输入从一个生命周期约束转换为具有全局生命周期约束的相同类型的输出(概念上类似于unsafe fn foo<'a, T1, T2>(x: T1) -> T2 where T1: 'a, T2 = T1 + 'static),但我不太清楚如何在不添加间接层的情况下编写它,例如Box。有任何想法吗?

更一般地说,我正在尝试实现一个不安全的thread::scoped按照mem::transmute and thread::spawn. spawn需要'static其界限T and F参数,但是scoped做/不应该。


虽然我也有类似的问题,我不建议延长生命周期限制。几乎可以肯定的是,对于出现这种情况的情况,需要采取不同的方法。

也就是说,您可以通过以下方式延长最新 Rust 稳定版(撰写本文时为 1.29.0)的生命周期:std::mem::transmute https://doc.rust-lang.org/1.29.0/std/mem/fn.transmute.html#examples.

文档中的示例(带有警告“这是高级的、非常不安全的 Rust!"):

struct R<'a>(&'a i32);
unsafe fn extend_lifetime<'b>(r: R<'b>) -> R<'static> {
    std::mem::transmute::<R<'b>, R<'static>>(r)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

摆脱一生的限制? 的相关文章

随机推荐