假设我通过未指定的方式来保证,我有一个类型为
换句话说,我该如何实现这个函数?
[*mut T; N]
的数组,其中包含 N
个有效且不重叠的可变指针,所有指针的生命周期都是 'a
。那么我如何将其转换为可变引用数组 [&'a mut T; N]
?换句话说,我该如何实现这个函数?
unsafe fn ptrs_to_refs<'a, T, const N: usize>(ptrs: [*mut T; N]) -> [&'a mut T; N] {
// What goes here?
}
我不是特别希望使用分配步骤的实现(例如使用Vec
)。
由于min_const_generics
在Rust 1.51中被设置为稳定版本,因此本问题针对的是一个假设的稳定版本Rust,该版本同时也拥有min_const_generics
。我正在寻找与这些要求兼容的答案,不使用其他不稳定的功能。
例如,使用特性array_map
可以简单地实现。
unsafe fn ptrs_to_refs<'a, T, const N: usize>(ptrs: [*mut T; N]) -> [&'a mut T; N] {
arr.map(|ptr| unsafe { &mut *ptr })
}
但是,由于我不知道它是否设定为稳定版本1.51(据我所知),我不想使用它。
MaybeUninit
数组中,然后将MaybeUninit
复制到其他地方(这是保证安全的)。 - orlpstd::mem::transmute_copy(&ptrs)
替换整个代码块应该可以工作。 - orlptransmute_copy
但失败了,但现在我确实看到它可以工作了... - Shepmaster