在閱讀了檔案和一些示例之后,我正在玩一些通用函式,但似乎我無法讓它們作業。這是我正在嘗試做的事情:
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>()給出錯誤:“不能使用外部函式的泛型引數”。我也一直在閱讀有關此錯誤的資訊,但無法解決這個問題。
uj5u.com熱心網友回復:
問題是您正在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>();
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/532045.html
標籤:功能仿制药锈
