相关文章: 将切片转换为固定大小的数组,但我正在寻找更具体的形式。
理想情况下,我希望构建一个具有以下签名的函数:
fn make_array<T; N>(slice: &[T]) -> [T; N];
由于目前不支持非类型参数,因此我考虑直接将数组作为函数的输入参数:
fn make_array<A>(slice: &[T]) -> A;
需要将A
替换为[T; N]
。
到目前为止,这是我最有希望的尝试:
use std::ops::DerefMut;
fn make_array<A, T>(slice: &[T]) -> A
where A: Sized + Default + DerefMut<Target = [T]>
{
let mut a = Default::default();
(&mut a[..]).copy_from_slice(slice);
a
}
fn main() {
let original = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let a: [u8; 4] = make_array(&original[0..4]);
println!("{:?}", a);
}
然而,我缺少一种将数组强制转换为切片的特性(提示:它不是 DerefMut
)。
只要函数仅适用于小型数组,是否有一种使用安全代码构建此类函数的方法?