【Rust每周一库】generic-array - 长度为范型的静态数组

本文介绍了在Rust中如何使用generic-array库创建长度为范型的静态数组,以克服Rust本身对数组长度的限制。通过示例展示了如何定义和使用这种数组,并提到Rust 2021将原生支持类似功能。
摘要由CSDN通过智能技术生成

今天是2021年的第一天,大家新的一年也要好好学习Rust呀~

在很多其他语言中,静态数组虽然是静态的,但是我们却可以“给它在运行时中指定一个动态的长度”。但在Rust中由于数组[T; N]中的N并不是范型,所以我们无法写出如下的代码:

struct Foo<N> {
	data: [i32; N]
}

今天我们介绍的generic-array库定义了trait ArrayLength<T>和结构体GenericArray<T, N: ArrayLength<T>>,这样我们就可以写出刚才我们想要的等价结构体了:

struct Foo<N: ArrayLength<i32>> {
	data: GenericArray<i32, N>
}

其中对于typenum库(一个范型的数值系统)中的无符号数,ArrayLength<T>有默认的实现,因此如果我们可以这样定义一个长度为5的数组

use generic_array::typenum::U5;

struct Foo<N: ArrayLength<i32>> {
    data: GenericArray<i32, N>
}

fn main() {
    let foo = Foo::<U5>{data: GenericArray::default()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值