在阅读了文档和一些示例之后,我尝试了一些泛型函数,但似乎我不能让它们工作。下面是我正在尝试做的事情:
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>()
给出错误:“无法使用外部函数”中的泛型参数。我也一直在阅读有关此错误的信息,但无法理解它。
1条答案
按热度按时间kninwzqo1#
问题是你要让一个
const
依赖于一个泛型参数,这是行不通的,因为每次调用函数时常量的值必须相同,但每次调用T
时都可能不同。您可以通过将其更改为普通变量绑定来轻松修复它: