gpt4 book ai didi

rust - 从切片构建固定大小数组的函数

转载 作者:行者123 更新时间:2023-11-29 08:03:07 26 4
gpt4 key购买 nike

<分区>

相关: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)。

只要我同意该函数仅适用于小型数组,有没有办法使用安全代码构建这样的函数?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com