2
相關:Slice to fixed-size array,但是我正在尋找更具體的形式。函數從片中構建固定大小的陣列
理想情況下,我想建立一個功能具有以下簽名:
fn make_array<T; N>(slice: &[T]) -> [T; N];
,因爲這是不可能的,但(因爲非類型參數是不是一個東西),我反而認爲具有的功能直接拿在陣列中:
fn make_array<A>(slice: &[T]) -> A;
,其中一個將替代[T; N]
爲A
。
這裏是,到目前爲止,我最有前途的嘗試:
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
)。
只要我沒事的功能僅適用於小數組的工作,有沒有建立安全使用代碼這樣的功能的方法嗎?