rust 一般函数问题

iszxjhcz  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(133)

在阅读了文档和一些示例之后,我尝试了一些泛型函数,但似乎我不能让它们工作。下面是我正在尝试做的事情:

pub fn read_uint<T>(buffer: &Vec<u8>, from: &mut usize, consume_data: bool) -> Option<T>
where
    T: num_traits::Unsigned,
{
    const BYTES_TO_READ:usize = core::mem::size_of::<T>();
    ... 
}

我用下面的语句调用这个函数:

let o: u8 = read_uint(buffer, from, false).unwrap();

首先,read_uint是如何推断T类型的?它是从赋值语句的左边推断出来的吗?
我以为电话会是这样的:

let o: u8 = read_uint<u8>(buffer, from, false).unwrap();

第二个问题与read_uint函数本身有关:
size_of::<T>()给出错误:“无法使用外部函数”中的泛型参数。我也一直在阅读有关此错误的信息,但无法理解它。

kninwzqo

kninwzqo1#

问题是你要让一个const依赖于一个泛型参数,这是行不通的,因为每次调用函数时常量的值必须相同,但每次调用T时都可能不同。
您可以通过将其更改为普通变量绑定来轻松修复它:

pub fn read_uint<T>(buffer: &[u8], from: &mut usize, consume_data: bool) -> Option<T>
where
    T: num_traits::Unsigned,
{
    let bytes_to_read = core::mem::size_of::<T>();
    ...
}

相关问题